From 67afa55f1d24319472c7c1f23b05a0af36f30f50 Mon Sep 17 00:00:00 2001 From: Gabriel Cardoso Date: Sat, 15 Oct 2022 02:15:11 +0000 Subject: [PATCH 01/49] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/pt_BR/ --- app/src/main/res/values-pt-rBR/strings.xml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 4b0035bdc..100c284ab 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -628,11 +628,11 @@ Entropia: Calculando… Pelo menos um caractere de cada Excluir caracteres ambíguos - Considerar caracteres + Considere caracteres MAIÚSCULAS Capitalização de Título Colorir senhas - Colorir caracteres da senha por tipo + Colorir caracteres de senha por tipo Frase secreta Entropia: %1$s bit Entropia: Alta @@ -644,7 +644,7 @@ Ignorar caracteres Separador minúsculas - Número de caracteres: %1$d + Contagem de caracteres: %1$d Aguardando o pedido de desafio… Aguardando a resposta do desafio… Cancelado pelo usuário. @@ -666,4 +666,6 @@ Permitir que aplicativos de terceiros gravem ou façam capturas de tela do aplicativo Modo de captura de tela Arquivo corrompido. + Preenchimento automático + Caixa de verificação da chave física \ No newline at end of file From 96a72d9842bab4c43a6a6ee699440c916b46a3b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Fern=C3=A1ndez=20D=C3=ADaz?= Date: Fri, 21 Oct 2022 12:15:30 +0000 Subject: [PATCH 02/49] Translated using Weblate (Spanish) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/es/ --- app/src/main/res/values-es/strings.xml | 186 ++++++++++++++----------- 1 file changed, 103 insertions(+), 83 deletions(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 40f790c43..7e0b04557 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -21,24 +21,24 @@ --> Comentarios Página de inicio - Implementación en Android del gestor de contraseñas KeePass + Implementación para Android del gestor de contraseñas KeePass Aceptar Añadir entrada Añadir grupo Algoritmo de cifrado Tiempo de espera superado - Inactividad antes del bloqueo de aplicación + Tiempo de inactividad antes de bloquear la base de datos Aplicación Configuración de la aplicación - Corchete + Corchetes Se requiere un administrador de archivos que acepte la acciones de intención ACTION_CREATE_DOCUMENT y ACTION_OPEN_DOCUMENT para crear, abrir y guardar los archivos de la base de datos. Portapapeles vaciado Portapapeles caducado - Duración del almacenaje en el portapapeles (si lo admite su dispositivo) + Duración del almacenamiento en el portapapeles (si el dispositivo lo admite) Seleccionar para copiar %1$s al portapapeles - Recuperando clave de BdD… + Recuperando clave de la base de datos… Base de datos - Descifrando el contenido de la base de datos… + Descifrando contenido de la base de datos… Utilizar como base de datos por defecto Dígitos KeePassDX © %1$d Kunzisoft es de <strong>código abierto</strong> y <strong>sin publicidad</strong>. @@ -46,11 +46,11 @@ Abrir base de datos existente Accedido Cancelar - Anotaciones + Notas Confirmar contraseña Creado Caduca - Cerrojo + Archivo clave Modificada Contraseña Guardar @@ -59,38 +59,38 @@ Nombre de usuario No se admite el cifrador de flujo Arcfour. KeePassDX no puede manejar este URI. - No se pudo crear el archivo - No se pudo leer la base de datos. - Asegúrese de que la ruta sea correcta. + No se ha podido crear el archivo + No se ha podido leer la base de datos. + Asegúrese de que la ruta es correcta. Proporcione un nombre. - Seleccione un archivo de clave. + Seleccione un archivo clave. No hay memoria para cargar toda la base de datos. - Debe seleccionar al menos un tipo de generación de contraseñas. + Debe seleccionarse al menos un tipo de generación de contraseñas. Las contraseñas no coinciden. - Pasadas demasiado grande. Establecido a 2147483648. + Rondas de transformación demasiado altas. Establecidas a a 2147483648. Introduzca un número entero positivo en el campo \"Longitud\". Explorador de archivos Generar contraseña Confirmar contraseña Contraseña generada - Nombre de grupo - Archivo de clave + Nombre del grupo + Archivo clave Longitud Contraseña Contraseña - No se pudieron leer las credenciales. - No se pudo reconocer el formato de la base de datos. + No se han podido leer las credenciales. + No se ha podido reconocer el formato de la base de datos. Longitud Tamaño de los elementos de la lista - Tamaño del texto de la lista de grupo + Tamaño del texto en la lista de elementos Cargando base de datos… Minúsculas Ocultar contraseñas - Enmascarar contraseñas (***) de manera predeterminada + Ocultar contraseñas (***) por defecto Acerca de - Cambiar Contraseña Maestra + Cambiar contraseña maestra Configuración - Configuración de Base de datos + Configuración de base de datos Eliminar Donar Editar @@ -102,13 +102,13 @@ Ir a URL Menos Nunca - Sin resultado de búsqueda + Sin resultados de búsqueda Instale un navegador web para abrir esta URL. Creando nueva base de datos… Trabajando… - Quitar + Eliminar Raíz - Pasadas de transformación + Rondas de transformación Un alto número de pasadas de cifrado proporciona protección adicional contra ataques de fuerza bruta, pero puede ralentizar mucho el cargado y el guardado. Guardando base de datos… Espacio @@ -133,28 +133,28 @@ Permitir Error del portapapeles Algunos dispositivos no permiten que las aplicaciones utilicen el portapapeles. - No se pudo vaciar el portapapeles + No se ha podido vaciar el portapapeles Cada cadena debe tener un nombre de campo. El servicio de autocompletado no se ha podido habilitar. Nombre del campo Valor del campo - No se pudo encontrar el archivo. Intente volver a abrirlo en el explorador de archivos. + No se ha podido encontrar el archivo. Intente volver a abrirlo en el explorador de archivos. Algoritmo incorrecto. - El archivo de clave está vacío. + El archivo clave está vacío. Copia de %1$s - Llenado de formulario + Rellenado de formularios Protección Protegida contra escritura Dependiendo del administrador de archivos, puede que KeePassDX no permita escribir en su almacenamiento. - Algoritmo de cifrado utilizado para todos los datos. + Algoritmo de cifrado de la base de datos usado para todos los datos Para generar la clave del algoritmo de cifrado, la clave maestra se transforma mediante una función de derivación de claves con una sal aleatoria. Uso de memoria Cantidad de memoria que usará la función de derivación de clave. Paralelismo - Grado de paralelismo (p. ej. número de hilos) usados por la función de derivación de clave. + Grado de paralelismo (p. ej. número de hilos) usado por la función de derivación de clave. Ordenar Más bajo primero ↓ - Agrupar antes + Grupos antes Papelera debajo Título Nombre de usuario @@ -162,7 +162,7 @@ Modificación Acceso Atención - No se pudieron encontrar los datos de entrada. + No se han podido encontrar los datos de la entrada. Evite los caracteres de la contraseña fuera del formato de codificación de texto en el archivo de la base de datos (los caracteres no reconocidos se convierten a la misma letra). ¿Continuar sin la protección de desbloqueo de contraseña\? ¿Continuar sin clave de cifrado\? @@ -197,7 +197,7 @@ Nombre del archivo Ruta Asignar una clave maestra - Crear una base de datos nueva + Crear nueva base de datos Uso de la papelera de reciclaje Mueve los grupos y las entradas al grupo \"Papelera de reciclaje\" antes de eliminarlos Tipografía del campo @@ -262,8 +262,8 @@ Cambiar el paquete de iconos en la aplicación Editar entrada No se pudo cargar la base de datos. - No se pudo cargar la clave. Intente disminuir el uso de memoria de KDF. - Enseña nombres de usuario + No se ha podido cargar la clave. Intente disminuir el uso de memoria de KDF. + Mostrar nombres de usuario Muestra los nombres de usuario en las listas de entrada Copiar Mover @@ -312,25 +312,25 @@ Abrir archivo Nodo heredado Añadir nodo - Añadir apunte + Añadir entrada Añadir grupo - Informe de archivo + Información del archivo Casilla de contraseña - Casilla del cerrojo - Icono de apunte + Casilla del archivo clave + Icono de entrada Generador de contraseñas Longitud de contraseña Añadir campo - Retirar campo + Eliminar campo UUID - No se puede mover una entrada aquí. + No puede mover una entrada aquí. No puede copiar una entrada aquí. - Mostrar el número de entradas + Mostrar número de entradas Muestra el número de entradas de un grupo Fondo Actualizar Cerrar campos - No se puede crear la base de datos con esta contraseña y este archivo de clave. + No se puede crear la base de datos con esta contraseña y este archivo clave. Desbloqueo avanzado Biometría Abrir petición automáticamente @@ -346,7 +346,7 @@ Clave maestra Seguridad Historial - Establecer una contraseña de un solo uso + Establecer contraseña de un solo uso Tipo de contraseña de un solo uso Secreto Período (segundos) @@ -355,13 +355,13 @@ Algoritmo Contraseña de un solo uso Secreto de contraseña de un solo uso inválida. - Por lo menos un credencial debe ser definido. - Clave secreta debe estar en formato Base32. - Contador debe estar entre %1$d y %2$d. + Se debe establecer al menos una credencial. + La clave secreta debe estar en formato Base32. + El contador debe estar entre %1$d y %2$d. No se puede guardar la base de datos. Este texto no coincide con el elemento requerido. - No fue posible crear el archivo de base de datos. - Parar lograr <strong>mantener nuestra libertad</strong>, <strong>corregir errores</strong>, <strong>agregar características</strong> y <strong>estar siempre activos</strong>, contamos con tu <strong>contribución</strong>. + No se puede crear el archivo de la base de datos. + Parar lograr mantener nuestra libertad, corregir errores, añadir funciones y estar siempre activos, contamos con tu contribución. Añadir elemento ¡Completado! Finalizando… @@ -391,17 +391,17 @@ Otorga acceso de escritura para guardar cambios en la base de datos Mostrar ubicaciones de bases de datos recientes Mostrar archivos recientes - Lleva un registro de los lugares donde se almacenan las bases de datos - Recordar las ubicaciones de las bases de datos + Lleva un registro de dónde se almacenan las bases de datos + Recordar ubicaciones de bases de datos La base de datos contiene UUIDs duplicados. Restaurar historial Vaciar papelera de reciclaje Guardar datos Creando base de datos… - %1$s con la misma UUID %2$s ya existe. + %1$s con el mismo UUID %2$s ya existe. Esta etiqueta ya existe. Descartar - ¿Descartar los cambios\? + ¿Descartar cambios\? Validar Contribución Contacto @@ -417,18 +417,18 @@ El acceso al archivo fue revocado por el administrador de archivos Ejecutando el comando… Ocultar enlaces rotos en la lista de bases de datos recientes - Ocultar enlaces de bases de datos rotos - Realiza un seguimiento de dónde se almacenan los archivos de claves - Recordar las ubicaciones de los archivos de clave + Ocultar enlaces rotos de la base de datos + Lleva un registro de dónde se almacenan los archivos clave + Recordar ubicaciones de archivos clave Buscar dominios web con restricciones de subdominios Búsqueda de subdominio Solicite una búsqueda al abrir una base de datos Búsqueda rápida - Eliminar el historial + Eliminar historial El token debe contener de %1$d a %2$d dígitos. Adjuntos Añadir adjunto - Informe de credenciales + Información de credenciales Base de datos abierta Adjuntar Cargue un archivo adjunto a la entrada para guardar datos externos importantes. @@ -474,7 +474,7 @@ Modo de guardado Modo de búsqueda ¿Resolver el problema generando nuevos UUID para que los duplicados continúen\? - Borrar la clave de desbloqueo avanzado + Eliminar clave de desbloqueo avanzado El nombre del campo ya existe. Guardar un nuevo elemento no está permitido en una base de datos de sólo lectura Recomendar la renovación @@ -515,12 +515,12 @@ Cambiar automáticamente al teclado anterior en la pantalla de credenciales de la base de datos Pantalla de credenciales de la base de datos Acción de la tecla automática - Trate de guardar la información compartida al hacer una selección de entrada manual para facilitar los usos futuros + Intente guardar la información compartida para su uso en el futuro cuando seleccione entradas manualmente Guardar información compartida Muestra el UUID vinculado a una entrada o a un grupo Mostrar UUID - No es posible reconstruir adecuadamente la lista. - La URI de la base de datos no puede ser recuperada. + No se puede reconstruir correctamente la lista. + No se puede recuperar la URI de la base de datos. Intenta mostrar sugerencias de autocompletado directamente desde un teclado compatible Añadidas sugerencias de autocompletado. Acceso al archivo revocado por el administrador de archivos, cierra la base de datos y vuelva a abrirla desde su ubicación. @@ -535,9 +535,9 @@ El tipo de OTP existente no es reconocido por este formulario, su validación ya no puede generar correctamente el token. ¡Cancelado! Los datos del archivo ya existen. - Se produjo un error al cargar los datos del archivo. + Se ha producido un error al cargar los datos del archivo. Propiedades de KeePassDX para gestionar la configuración de la aplicación - Informe de contraseña de un solo uso + Información de contraseña de un solo uso Personalizado Estándar Seleccionar temas oscuros o claros @@ -551,9 +551,9 @@ Exportar propiedades de la aplicación Seleccione un archivo para importar las propiedades de la aplicación Importar propiedades de la aplicación - Ocurrió un error al realizar una acción en la base de datos. - Ocurrió un error al eliminar los datos del archivo. - El archivo que está tratando de cargar es demasiado grande. + Se ha producido un error al realizar una acción en la base de datos. + Se ha producido un error al eliminar los datos del archivo. + El archivo que está intentando cargar es demasiado grande. No puede mover un grupo aquí. Esta palabra está reservada y no se puede usar. Plantillas @@ -564,14 +564,14 @@ Plantilla Estándar Membresía - Nota Segura + Nota segura Nombre del banco Banco Cuenta Semilla Clave privada Clave pública - Billetera de criptomonedas + Cartera de criptomonedas Tipo Wi-Fi Dirección de correo electrónico @@ -579,16 +579,16 @@ Fecha de emisión Lugar de emisión Nombre - Tarjeta de Identificación + Documento de identidad Número Titular Tarjeta de Crédito / Débito Plantillas - Número Internacional de Cuenta Bancaria + IBAN SWIFT / BIC Token SSID - Número de Identificación Personal + PIN CVV Muestra los tokens OTP en la lista de entradas Mostrar token OTP @@ -600,8 +600,8 @@ No ha permitido que la app use una alarma exacta. Como resultado, las funciones que requieren un temporizador no se harán con una hora exacta. Permiso Color de la base de datos - Color de primer plano del apunte - Color de fondo del apunte + Color de primer plano de la entrada + Color de fondo de la entrada Etiquetas La recarga de la base de datos borrará los datos modificados localmente. El hash del archivo no está garantizado porque Android puede cambiar sus datos sobre la marcha. Cambia la extensión del archivo a .bin para una correcta integridad. @@ -609,7 +609,7 @@ Mantenga la pantalla encendida cuando vea la entrada Modo captura de pantalla Permitir que otras aplicaciones graben o tomen capturas de pantalla de la aplicación - Muestra los colores de primer y segundo plano en una entrada + Muestra los colores de primer y segundo plano de una entrada Colores de entrada Fusionar datos Cajón de navegación cerrado @@ -617,16 +617,16 @@ Expresión regular Cabecera de navegación Cajón de navegación abierto - Sensible a las mayúsculas y minúsculas - Secuencia de autotipado + Sensible a mayúsculas y minúsculas + Secuencia de autocompletado Datos personalizados Grupo actual Filtros de búsqueda Fusionar desde … - Guardar una copia en … + Guardar una copia en… Heredar Caducada - Colorear caracteres de contraseña por el tipo + Colorear caracteres de contraseña por tipo Ya hay abierta una base de datos, cierrela antes de abrir otra Excluya caracteres ambiguos Considere caracteres @@ -636,8 +636,8 @@ \n \nDependiendo de la implementación del API nativo del sistema operativo, tal vez no sea completamente funcional. \nCompruebe la compatibilidad y garantía del almacenaje KeyStore con el fabricante de su dispositivo y el creadas de la ROM que está utilizando. - Conteo de palabras de contraseña-frase - Contraseña frase + Recuento de palabras de la frase de paso + Frase de acceso Colorear contraseñas Pantalla de búsqueda Volver automáticamente al teclado anterior en la pantalla de búsqueda @@ -650,4 +650,24 @@ Tipo Titular Conteo de caracteres: %1$d Modo captura de pantalla - + La llave física no está soportada. + No se recuperan datos del usuario, esta aplicación no se conecta a ningún servidor, funciona solo localmente y respeta completamente la privacidad del usuario. + Imposible fusionar desde una base de datos V1. + Cancelado por el usuario. + Imposible obtener la respuesta del desafío. + Autocompletar + Llave física + Seleccione una llave física. + Error en la sintaxis XML. + Desafío ya solicitado + Respuesta ya recibida. + Se necesita un controlador para %1$s. + La ubicación de la base de datos es desconocida, la acción de la base de datos no se puede realizar. + La clave no puede estar vacía. + Archivo dañado. + Recordar llaves físicas + Realiza un seguimiento de las llaves físicas usadas + Casilla de llave física + Esperando solicitud de desafío… + Esperando respuesta al desafío… + \ No newline at end of file From 5349c4783e6ad7d902b4a10db42d0dab70b16d02 Mon Sep 17 00:00:00 2001 From: Anonimas Date: Thu, 20 Oct 2022 14:20:33 +0000 Subject: [PATCH 03/49] Translated using Weblate (Lithuanian) Currently translated at 39.7% (251 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/lt/ --- app/src/main/res/values-lt/strings.xml | 61 +++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 602cadbe8..72d5e692b 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -116,7 +116,7 @@ Kontaktai Redaguoti įrašą Pridėti priedą (failą) - Duomenų bazės šifravimo algoritmas naudojamas visiems duomenims. + Duomenų bazės šifravimo algoritmas naudojamas visiems duomenims Istorija Priedai Pridėti lauką @@ -212,4 +212,63 @@ Turi būti nustatytas bent vienas kredencialas. \"Transformacijos raundai\" per dideli. Nustatome į 2147483648. Kiekviena eilutė turi turėti laukelio pavadinimą. + Auto-įvedimas + CVV + Numeris + Vardas + Įrašo pavadinimas jau egzistuoja. + Duomenų bazės URI nepavyko gauti. + Rakto išvedimo funkcija + KeePassDX © %1$d Kunzisoft yra atviro kodo ir be reklamų. +\nJis teikiamas toks, koks yra, pagal GPLv3 licenciją, be jokių garantijų. + Privatus raktas + Išdavimo data + El. pašto adresas + Kriptovaliutos piniginė + SWIFT / BIC + IBAN + Šablonas + Išdavimo vieta + Įrašyti naują elementą neleidžiama tik skaitymui skirtoje duomenų bazėje + Įkeliant failo duomenis įvyko klaida. + Įrašo pirmojo plano spalva + Įrašo fono spalva + Šis tekstas neatitinka prašomo elemento. + Vienkartinio slaptažodžio info + Failas, kurį bandote įkelti, yra per didelis. + Ši forma neatpažįsta esamo OTP tipo, jos patvirtinimas gali nebegeneruoti teisingo žetono. + Jokie naudotojo duomenys nerenkami, ši programa neprisijungia prie jokio serverio, veikia tik vietoje ir visiškai nepažeidžia naudotojų privatumo. + Debit / Kreditinė kortelė + Turėtojas + El. paštas + Narystė + Srautinis šifras Arcfour nepalaikomas. + XML sugadintas. + Nepavyksta tinkamai atkurti sąrašo. + Failo duomenys jau egzistuoja. + Patvirtinti + Laikymo iškarpinėje trukmė (jei tai palaiko jūsų prietaisas) + Navigacijos antraštė + Atidaryti navigacijos dėklą + Uždaryti navigacijos dėklą + Šablonai + Galima paieška + Paveldėti + Auto-įvedimo seka + Žymės + Tinkinti duomenys + Paieškos filtrai + Dabartinė grupė + Didžiųjų ir mažųjų raidžių skirtumas + Reguliarioji išraiška + PIN + ID kortelė + Wi-Fi + SSID + Tipas + Žetonas + Viešas raktas + Pakartotinai perjungti slaptažodžio matomumą + Slaptafrazės žodžių skaičius + Ši etiketė jau egzistuoja. \ No newline at end of file From 7a151bc2febd717dc0ea6aa90c1e2f83b7f5695e Mon Sep 17 00:00:00 2001 From: Jacek Date: Wed, 19 Oct 2022 21:11:15 +0000 Subject: [PATCH 04/49] Translated using Weblate (Polish) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/pl/ --- app/src/main/res/values-pl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index be2fe481b..c8f4504be 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -408,7 +408,7 @@ Ukryj wygasłe wpisy Wygasłe wpisy nie są wyświetlane Kontakt - Aby <strong>zachować naszą wolność</strong>, <strong>sprawdzać błędy</strong>, <strong>dodawać funkcje</strong> i <strong> być zawsze aktywnym</strong>, liczymy na Twój <strong>wkład</strong>. + Aby zachować naszą wolność, naprawiać błędy, dodawać funkcje i być zawsze aktywnym, liczymy na Twój wkład. Szybkie wyszukiwanie Wyszukiwanie po otwarciu bazy danych Zapamiętaj lokalizacje baz danych From affcc28f13787f98687f5b8db4fd14e9e6ed0be4 Mon Sep 17 00:00:00 2001 From: magnum Choi Date: Wed, 19 Oct 2022 23:36:43 +0000 Subject: [PATCH 05/49] Translated using Weblate (Korean) Currently translated at 50.2% (317 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ko/ --- app/src/main/res/values-ko/strings.xml | 103 ++++++++++++++++++++++++- 1 file changed, 102 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index e78858949..274575cbc 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -126,7 +126,7 @@ 쓰기 보호됨 수정 가능 마이너스 - 정대 + 절대 하지 않음 검색 결과가 없음 이 URL을 열기 위해 웹 브라우저를 설치하십시오. 가지고 있는 데이터베이스 열기 @@ -248,4 +248,105 @@ 카운터는 반드시 %1$d과 %2$d사이여야 합니다. 그 텍스트는 요청된 아이템과 일치하지 않습니다. 그 필드 이름은 이미 존재합니다. + 상속 + 자동입력 + 데이터베이스가 이미 열려있습니다. 새 것을 열려면 지금 것을 먼저 닫아주세요. + 최근 데이터베이스 목록에서 파손된 링크를 감춤 + 앱 속성을 내보낼 파일을 선택 + 앱 속성을 가져왔습니다. + 암호화 알고리즘 용 키를 생성하기 위해, 마스터키는 임의의 솔트(salt) 키 파생 함수를 사용하여 변환됩니다. + 경고 + 이미 요청된 시도입니다 + XML 양식이 틀어짐. + 파일 데이터를 업로드하는 중 오류가 발생했습니다. + 이미 응답했습니다. + 데이터 베이스 위치를 알 수 없어 데이터 베이스 액션을 수행할 수 없습니다. + %1$s 를 위한 드라이버가 요구됩니다. + 데이터베이스 V1로부터 병합할 수 없습니다. + 하드웨어 키는 지원하지 않습니다. + 키는 반드시 입력해야 합니다. + 아이콘명 + 암호문 + 비밀번호에 색상 부여 + 타입에 따라 비밀번호 문자에 색상을 부여 + 앱 속성을 내보내기 + 대문자 + 보안 설정 + 데이터 다시 읽기 + 휴지통 비우기 + 데이터베이스를 열 때 검색을 요청 + 빠른 검색 + 키 파일 저장된 곳을 추적 + 저장 모드 + 선택 모드 + 하드웨어 키를 기억 + 앱 속성을 내보낼 파일을 생성 + 앱 속성을 가져오던 중 오류 발생 + 데이터베이스가 중복된 UUID를 포함하고 있습니다. + 데이터 베이스가 저장된 곳을 추적 + 키 파일 위치를 기억 + 하드웨어 키 사용을 추적 + 기존 OTP 종류가 본 양식에서 인식되지 않습니다. 그 유효성은 더이상 토큰값 생성을 정확히 못할 수 있습니다. + 보조 도메인 검색 + 데이터베이스 위치를 기억 + 최근 파일을 표시 + 최근 데이터베이스의 위치를 표시 + 앱 설정을 관리하기 위한 KeePassDX 속성 + 필터 + 순서 지정 없음 + 제목 + 사용자명 + 생성 + 수정 + 검색 + 비밀번호 문자가 데이터베이스 파일의 텍스트 인코딩 범위를 넘는 것을 회피 (인식되지 않는 문자는 동일 글자로 변환). + 데이터베이스 변경을 저장하기 위해 파일 쓰기 권한을 허용 + 이력을 삭제 + 은행명 + 토큰값은 %1$d 자리 이상 %2$d 자리 이하가 되어야 합니다. + 파일 데이터가 이미 존재합니다. + 파일 데이터를 제거하는 중 오류가 발생했습니다. + 데이터베이스에 대한 동작 수행 중 오류가 발생했습니다. + 데이터 저장 + 이력을 복구 + 보조 도메인 제한하에 웹 도메인을 검색 + 중복에 대해 새로운 UUID를 생성하여 문제를 해결하고 진행할까요\? + 앱 속성을 내보냈습니다. + 병렬 처리 + 명령 실행중… + 마스터 키 설정 + OTP 토큰을 표시 + 그룹에 속한 항목수를 표시 + 외부 아이콘 + 고급 잠금 해제 + 검색 모드 + 추가적인 암호화 차수를 설정함으로써 무차별 대입 공격(brute force attack)에 대한 방어를 강화할 수 있습니다. 대신 읽기/저장시 느려질 수 있습니다. + 앱을 강제 종료하지 마세요. + 휴지통을 바닥에 + 파일에 대한 접근이 파일 관리자에 의해 철회되었습니다. + 파손된 데이터페이스 링크를 감춤 + 앱 속성을 가져오기 + 앱 속성을 내보내던 중 오류 발생 + 변환 차수 + 키 파생 함수에 사용되는 병렬 처리 수준 (즉, 스레드의 갯수) + 사용자 데이터를 받아오지 않습니다. 어떤 서버에도 연결하지 않고 로컬로만 동작하며 사용자의 사생활(프라이버시)를 최우선시합니다. + 목록 재구축을 알맞게 할 수 없습니다. + 업로드하려는 파일이 너무 큽니다. + 요청한 시도로부터 응답을 받을 수 없습니다. + 사용자가 취소했습니다. + 파일이 훼손되었습니다. + 항목수를 표시 + 항목 목록에서 OTP 토큰을 표시 + UUID를 표시 + 항목이나 그룹에 연결된 UUID를 표시 + 데이터 베이스를 생성 + 데이터 병합 + ... 로부터 병합 + ... 에 복사본 저장 + 고급 잠금 해제 키를 삭제 + 등록 모드 + 접근 + %1$s 와 동일한 UUID %2$s 가 이미 존재합니다. + 밑줄 + 지원하지 않는 데이터베이스 버전입니다. \ No newline at end of file From e22d9f6bdf2f6ebedefb114a2ab25ae9bfcee50f Mon Sep 17 00:00:00 2001 From: WB Date: Sun, 23 Oct 2022 20:41:47 +0000 Subject: [PATCH 06/49] Translated using Weblate (Galician) Currently translated at 66.4% (419 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/gl/ --- app/src/main/res/values-gl/strings.xml | 30 +++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 0e256f0c1..33d410124 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -34,9 +34,9 @@ Permitir Portapapeis limpo Erro do portapapeis - Fallou a limpeza do portapapeis + Non foi posíbel limpar o portapapeis Tempo límite para o portapapeis - Tempo antes de limpar o portapapeis após copiar usuario ou contrasinal + Duración do almacenamento do portapapeis (se for soportado polo seu dispositivo) Editar entrada Seleccione para copiar %1$s para o portapapeis A criar a chave da base de dados… @@ -180,7 +180,7 @@ Copiar O arquivo que está a tentar enviar é demasiado grande. Gardar unha copia en … - Só lectura + Protección contra escritura Modificábel A clave hardware non é soportada. Valor do campo @@ -431,4 +431,28 @@ Servizo de autocompletado do KeePassDX Historial Aínda precisa lembrar a súa credencial principal se usar o recoñecemento de desbloqueo avanzado. + Desbloqueo avanzado temporal + Nome do arquivo + Duración do desbloqueo avanzado + Duración do uso do desbloqueo avanzado antes de borrar os seus contidos + Tempo límite de desbloqueo avanzado + Borrar todas as claves de cifrado relacionadas co desbloqueo de recoñecemento avanzado + Asignar unha clave mestra + Datos + A compresión de datos reduce o tamaño da base de datos + Borrar datos non ligados + Borrar anexos contidos na base de datos mais non ligados a unha entrada + Non foi posíbel iniciar esta funcionalidade. + Compresión de datos + Pedir automaticamente o desbloqueo avanzado se a base de datos estiver configurada para o seu uso + Non almacenar ningún contido cifrado para o desbloqueo avanzado + Borrar todas as claves de cifrado relacionadas co desbloqueo de recoñecemento avanzado\? + Esta funcionalidade almacenará os datos de credenciais cifrados na KeyStore do seu dispositivo. +\n +\nDependendo da implementación da API nativa do seu sistema operativo, pode non ser completamente funcional. +\nRevise a compatibilidade e seguranza da KeyStore co fabricante do seu dispositivo e co creador da ROM que está a usar. + Este dispositivo está a usar Android %1$s, mais precisa do %2$s ou posterior. + Borrar claves de cifrado + Non foi posíbel encontrar o hardware correspondente. + Ruta \ No newline at end of file From d2101fd3e52cfeb06d258019c5dcdf1efc9b8259 Mon Sep 17 00:00:00 2001 From: Retrial Date: Tue, 1 Nov 2022 05:06:46 +0000 Subject: [PATCH 07/49] Translated using Weblate (Greek) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/el/ --- app/src/main/res/values-el/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 6635456f4..0126f9460 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -138,7 +138,7 @@ Κρυπτογράφηση Συνάρτηση παραγωγής κλειδιού - Extended ASCII + Εκτεταμένο ASCII Δέχομαι Δεν ήταν δυνατή η ενεργοποίηση της υπηρεσίας αυτόματης συμπλήρωσης. Δεν ήταν δυνατή η εύρεση αρχείου. Δοκιμάστε να το ανοίξετε ξανά από το πρόγραμμα περιήγησης αρχείων σας. From 652616226bfc18d5c58bcec9ab3381556c36cdc0 Mon Sep 17 00:00:00 2001 From: Darin Avdeyeva Date: Sat, 5 Nov 2022 07:37:53 +0000 Subject: [PATCH 08/49] Translated using Weblate (Russian) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ru/ --- app/src/main/res/values-ru/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 04e27ac5d..072d5ad46 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -266,9 +266,9 @@ Участвуйте Примите участие в проекте для повышения стабильности, безопасности и добавления новых возможностей. В отличие от многих других приложений управления паролями, здесь <strong>нет рекламы</strong>, и оно <strong>свободно от лицензирования</strong>. Приложение не собирает ваши личные данные на своих серверах независимо от версии, которую вы используете. - Купив Pro–версию, у вас появится доступ к данным <strong>визуальным стилям</strong>, а также вы внесёте вклад в <strong>реализацию общественных проектов</strong>. + Купите Pro–версию и откройте доступ к этой теме. Покупая Pro-версию, вы помогаете разработчикам открытого ПО. Эти <strong>визуальные стили</strong> доступны благодаря вашей щедрости. - Для того, чтобы сохранить нашу независимость и быть всегда активными, мы рассчитываем на вашу <strong>поддержку</strong>. + Для развития нашего проекта и его независимости, нам необходима ваша поддержка. Эта функция находится <strong>в разработке</strong> и требует вашего <strong>участия</strong>, чтобы стать доступной в ближайшее время. Покупая <strong>Pro</strong>–версию, <strong>Участвуя в проекте</strong>, From c6c14c2354979703b4f32e3d61ef87ef254dfcad Mon Sep 17 00:00:00 2001 From: solokot Date: Sat, 5 Nov 2022 08:54:16 +0000 Subject: [PATCH 09/49] Translated using Weblate (Russian) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ru/ --- app/src/main/res/values-ru/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 072d5ad46..4a49a8451 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -268,7 +268,7 @@ В отличие от многих других приложений управления паролями, здесь <strong>нет рекламы</strong>, и оно <strong>свободно от лицензирования</strong>. Приложение не собирает ваши личные данные на своих серверах независимо от версии, которую вы используете. Купите Pro–версию и откройте доступ к этой теме. Покупая Pro-версию, вы помогаете разработчикам открытого ПО. Эти <strong>визуальные стили</strong> доступны благодаря вашей щедрости. - Для развития нашего проекта и его независимости, нам необходима ваша поддержка. + Для развития нашего проекта и его независимости нам необходима ваша поддержка. Эта функция находится <strong>в разработке</strong> и требует вашего <strong>участия</strong>, чтобы стать доступной в ближайшее время. Покупая <strong>Pro</strong>–версию, <strong>Участвуя в проекте</strong>, From 0ca392f312c4ad1e789050e153896fb8e22fd8cb Mon Sep 17 00:00:00 2001 From: ssantos Date: Sun, 6 Nov 2022 08:04:38 +0000 Subject: [PATCH 10/49] Translated using Weblate (Portuguese (Portugal)) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/pt_PT/ --- app/src/main/res/values-pt-rPT/strings.xml | 102 ++++++++++++++++++--- 1 file changed, 89 insertions(+), 13 deletions(-) diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 3d01e8e03..28ce9f777 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -142,7 +142,7 @@ ASCII estendido Permitir - Não foi possível abrir a sua base de dados. + Não foi possível abrir a base de dados. Não foi possível carregar a chave. Tente diminuir o \"Uso de memória\" do KDF. Mostrar nomes de utilizador Cópia de %1$s @@ -186,7 +186,7 @@ Encriptação Função de derivação de chave Não foi possível ativar o serviço de preenchimento automático. - Algoritmo de encriptação usado para todos os dados. + Algoritmo de encriptação usado para todos os dados Define o tamanho predefinido para as palavras-passe geradas Caracteres das palavras-passe Definir os caracteres permitidos para o gerador de palavras-passe @@ -276,7 +276,7 @@ \n \n\"Apenas leitura\" evita que faça alterações não intencionais na base de dados. \n\"Alterável\" permite adicionar, eliminar ou alterar todos os elementos. - Mostrar nomes de utilizador na lista entradas + Mostra nomes de utilizador nas listas de entradas Área de transferência Magikeyboard Magikeyboard (KeePassDX) @@ -299,7 +299,7 @@ Modo de seleção Não feche a aplicação… Pressione \'Voltar\' para bloquear - Tranca a base de dados quando o utilizador pressiona o botão voltar no ecrã inicial + Bloquear a base de dados quando o utilizador pressiona o botão voltar no ecrã inicial Limpar ao fechar Bloquear a base de dados quando a duração da área de transferência expirar ou quando a notificação for fechada depois de começar a utilizá-la Caixote da reciclagem @@ -325,14 +325,14 @@ Não se pode mover uma entrada para aqui. Não se pode copiar uma entrada aqui. Mostrar número de entradas - Mostrar o número de entradas dentro de um grupo + Mostra o número de entradas dentro de um grupo Cor personalizada da base de dados A compressão de dados reduz o tamanho da base de dados Permite que leia os seus dados biométricos para abrir a base de dados Usar desbloqueio avançado para abrir a base de dados mais facilmente Base de dados aberta A base de dados contém UUIDs duplicados. - Guardar base de dados + Guardar dados A criar a base de dados… Não foi possível guardar a base de dados. Não foi possível criar a base de dados com essa palavra-passe e ficheiro-chave. @@ -473,26 +473,26 @@ Não foi possível ler a chave de desbloqueio avançada. Por favor, elimine-a e repita o procedimento de reconhecimento de desbloqueio. Extrair credencial da base de dados com dados de desbloqueio avançados Abrir base de dados com reconhecimento de desbloqueio avançado - Advertência: ainda tem de se lembrar da sua palavra-passe principal se usar o reconhecimento de desbloqueio avançado. + Ainda terá de se lembrar da sua credencial principal se usar o reconhecimento de desbloqueio avançado. Reconhecimento de desbloqueio avançado Abrir o alerta de desbloqueio avançado para armazenar as credenciais Abrir o alerta de desbloqueio avançado para desbloquear a base de dados É necessária uma atualização de segurança biométrica. Não está registada nenhuma credencial biométrica ou de dispositivo. Acesso ao ficheiro revogado pelo gestor de ficheiros. Feche a base de dados e reabra-a a partir da sua localização. - Substitua as alterações externas, guardando a base de dados ou recarregando-a com as últimas alterações. + Unir os dados, substituir as alterações externas guardado a base de dados ou recarregá-los com as últimas alterações. A informação contida no seu ficheiro da base de dados foi alterada fora da aplicação. Eliminar permanentemente todos os nós do caixote da reciclagem\? Modo de registo Modo de guardar Modo de pesquisa Eliminar chave de desbloqueio avançada - Recarregar base de dados + Recarregar dados Não foi possível reconstruir adequadamente a lista. Não foi possível recuperar o URI da base de dados. O nome do campo já existe. Não é permitido guardar um novo item numa base de dados só de leitura - Informações sobre a palavra-passe de uso único + Informação de palavra-passe de uso único Mostra os tokens OTP na lista de entradas Mostrar token OTP Mostra o UUID ligado a uma entrada ou grupo @@ -510,9 +510,9 @@ Desbloqueio avançado da base de dados Adicionadas sugestões de preenchimento automático. Não é possível guardar dados numa base de dados aberta apenas com permissão de leitura. - Pedir para guardar dados quando é validado um formulário + Pedir para guardar dados quando terminar de preencher um formulário Pedir para guardar dados - Tentar guardar as informações de pesquisas ao fazer uma seleção de entrada manual + Tentar guardar as informações de pesquisas ao fazer uma seleção de entrada manual para facilitar utilizações posteriores Guardar informações de pesquisas Mostrar opção para permitir que o utilizador selecione a entrada da base de dados Seleção manual @@ -527,7 +527,7 @@ Campos personalizados Mudar automaticamente para o teclado anterior após bloquear a base de dados Bloquear base de dados - Depois de partilhar um URL com o KeePassDX, quando uma entrada for selecionada, memorizar essa entrada para utilizações posteriores + Tentar guardar informação partilhada ao fazer uma seleção manual de entradas para uma utilização futura mais fácil Guardar informação partilhada Modelos Notificação @@ -592,4 +592,80 @@ Desbloqueio das credenciais do dispositivo Tocar para as eliminar chaves de desbloqueio avançado Conteúdo + Expirou + Frase-chave + Manter o ecrã ligado + Não se pode mover um grupo para aqui. + Caixa de verificação da chave física + Cor do primeiro plano da página inicial + Número de palavras da frase-chave + À espera do pedido de desafio… + À espera da resposta ao desafio… + Nenhum dado de utilizador é recuperado, esta aplicação não se liga a nenhum servidor, funciona apenas localmente e respeita plenamente a privacidade dos utilizadores. + Etiquetas + Filtros de pesquisa + Wi-Fi + Desafio já solicitado + Resposta já fornecida. + Não foi possível obter a resposta do desafio. + Não é possível fundir a partir de uma base de dados V1. + A localização da base de dados é desconhecida, a ação da base de dados não pode ser executada. + A chave física não é suportada. + A chave não pode estar vazia. + Ficheiro corrompido. + Colorir palavras-passe + Mantém um registo das chaves físicas utilizadas + Já está aberta uma base de dados, feche-a primeiro para poder abrir uma nova + Recarregar a base de dados irá eliminar os dados alterados localmente. + O hash do ficheiro não é garantido porque o Android pode alterar os seus dados em tempo real. Altere a extensão do ficheiro para .bin para obter a integridade correta. + Esta funcionalidade irá armazenar dados encriptados de credenciais na KeyStore segura do seu dispositivo. +\n +\nDependendo da implementação da API nativa do sistema operativo, esta pode não estar totalmente funcional. +\nVerifique a compatibilidade e segurança da KeyStore com o fabricante do seu dispositivo e com o criador da ROM que está a utilizar. + Mudar automaticamente para o teclado anterior no ecrã de pesquisa + Permitir que aplicações de terceiros registem ou fotografem os ecrãs da aplicação + Entropia: %1$s bit + Entropia: alta + Entropia: calcular… + Considerar caracteres + Separador + Ignorar caracteres + MAIÚSCULAS + Capitalização de Título + Cores da entrada + Modo de captura de ecrã + Mostra as cores de fundo e de primeiro plano numa entrada + Ecrã de pesquisa + Manter o ecrã ligado ao ver uma entrada + Pelo menos um caractere de cada um + Excluir caracteres ambíguos + Número de caracteres: %1$d + Cor da base de dados + Cor do fundo da página inicial + Não permitiu que a aplicação usasse um alarme exato. Como resultado, as funcionalidades que requerem um temporizador não serão feitas com um tempo exato. + Permissão + Colorir caracteres da palavra-passe por tipo + Nome do ícone + Chave física + Selecione uma chave física. + XML malformado. + Cancelado pelo utilizador. + É necessário o driver para %1$s. + Unir dados + Lembrar chaves físicas + Modo de captura de ecrã + minúsculas + Cabeçalho de navegação + Gaveta de navegação aberta + Gaveta de navegação fechada + Herdar + Pesquisável + Preenchimento automático + Sequência de preenchimento automático + Dados personalizados + Grupo atual + Sensível a maiúsculas e minúsculas + Expressão regular + Unir de… + Guardar uma cópia em… \ No newline at end of file From d4e0c008b8f3f8b4f6cf77a005c5f1fdc91a0e30 Mon Sep 17 00:00:00 2001 From: bowornsin Date: Tue, 8 Nov 2022 07:37:59 +0100 Subject: [PATCH 11/49] Added translation using Weblate (Thai) --- app/src/main/res/values-th/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-th/strings.xml diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/app/src/main/res/values-th/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From d93e3a1c2d5a9f820784e79e15eee585f9743cd0 Mon Sep 17 00:00:00 2001 From: bowornsin Date: Tue, 8 Nov 2022 06:41:18 +0000 Subject: [PATCH 12/49] Translated using Weblate (Thai) Currently translated at 4.1% (26 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/th/ --- app/src/main/res/values-th/strings.xml | 38 +++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index a6b3daec9..3a7bc0428 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -1,2 +1,38 @@ - \ No newline at end of file + + อัลกอริทึมของการเข้ารหัส + การเข้ารหัส + ร่วมแก้ไข + ข้อเสนอแนะ + แอปพลิเคชั่นการจัดการรหัสผ่าน KeePass บน Android + ยอมรับ + เพื่มกลุ่ม + รหัสผ่านหลัก + แอป + วงเล็บ + อนุญาต + ล้างคลิปบอร์ดแล้ว + คลิปบอร์ดผิดพลาด + ยืนยันรหัสผ่าน + รหัสผ่าน + ตั้งค่ารหัสผ่านแบบใช้ครั้งเดียว + รหัสผ่านไม่ตรงกัน + การตั้งค่าแอป + หน้าหลัก + ความปลอดภัย + ปิดบังรหัสผ่านเป็น (***) โดยค่าเรื่มต้น + ระยะเวลาที่ไม่ได้ใช้งานก่อนที่ฐานข้อมูลจะถูกล็อก + ใช้งานการยืนยันข้้นสูงเพื่อปลดล็อกฐานข้อมูล + การตั้งค่า + รหัสผ่าน + สร้างรหัสผ่าน + เปลี่ยนรหัสผ่านหลัก + การตั้งค่ารหัสผ่านหลัก + กำหนดรหัสผ่านหลัก + ความยาวของรหัสผ่าน + ต้องเลือกรูปแบบของรหัสผ่านที่จะสร้างอย่างน้อยหนึ่งประเภท + สร้างรหัสผ่าน + รหัสผ่าน + ซ่อนรหัสผ่าน + ยืนยันรหัสผ่าน + \ No newline at end of file From ee6c8fc04130aec1a9eec87c3117fc67d1bf023e Mon Sep 17 00:00:00 2001 From: Jacek Date: Tue, 15 Nov 2022 01:31:07 +0000 Subject: [PATCH 13/49] Translated using Weblate (Polish) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/pl/ --- app/src/main/res/values-pl/strings.xml | 44 +++++++++++++------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index c8f4504be..79245c831 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with KeePassDX. If not, see . --> - Informacje zwrotne + Zgłoś błąd lub sugestię Strona główna Implementacja menedżera haseł KeePass w systemie Android Akceptuj @@ -37,7 +37,7 @@ Tworzenie klucza bazy danych… Baza danych Odszyfrowywanie zawartości bazy danych… - Użyj jako domyślnej bazy danych + Ustaw jako domyślną bazę danych Cyfry Otwórz istniejącą bazę danych Dostęp do pliku @@ -82,13 +82,13 @@ Wczytywanie bazy danych… Małe litery Ukryj hasła - Maskuj hasła (***) domyślnie - Informacje + Domyślnie maskuj hasła (***) + O aplikacji Zmień klucz główny Ustawienia Ustawienia bazy danych Usuń - Dotuj + Wspomóż Edytuj Ukryj hasło Zablokuj bazę danych @@ -193,7 +193,7 @@ Powiadomienia ze schowka Pokaż powiadomienia schowka, aby skopiować pola podczas przeglądania wpisu Jeśli automatyczne usuwanie schowka nie powiedzie się, ręcznie usuń jego historię. - Blokada + Zablokuj bazę danych Blokada ekranu Zablokuj bazę danych po kilku sekundach od wyłączenia ekranu Zaawansowane odblokowywanie @@ -211,7 +211,7 @@ Wykorzystaj kosz Przenosi grupy i wpisy do grupy \"Kosz\" przed usunięciem Czcionka pola - Zmień czcionkę użytą w polach, aby poprawić widoczność postaci + Zmień czcionkę użytą w polach, aby poprawić widoczność znaków Zaufanie do schowka Zezwalanie na kopiowanie hasła wejściowego i chronionych pól do schowka Ostrzeżenie: Schowek jest współużytkowany przez wszystkie aplikacje. Jeśli poufne dane są kopiowane, inne oprogramowanie może je odzyskać. @@ -277,7 +277,7 @@ Ciężko pracujemy, aby szybko udostępnić tę funkcję. Pamiętaj, aby aktualizować swoją aplikację, instalując nowe wersje. Pobieranie - Przyczyń się + Wspomóż projekt Motyw aplikacji Motyw używany w aplikacji Pakiet ikon @@ -365,7 +365,7 @@ Zaleca się zmianę klucza głównego (dni) Wymagaj zmiany klucza głównego (dni) Domyślna nazwa użytkownika - Niestandardowy kolor bazy danych + Własny kolor bazy danych Kompresja Żadna Gzip @@ -382,7 +382,7 @@ Użyj zaawansowanego odblokowywania w celu łatwiejszego otwierania bazy danych Kompresja danych zmniejsza rozmiar bazy danych Maksymalna liczba - Ogranicz rozmiar historii na wpis + Ogranicz rozmiar historii każdego wpisu Wymuś odnowienie Wymuś odnowienie następnym razem Wymagaj zmiany klucza głównego następnym razem (raz) @@ -404,7 +404,7 @@ Inicjowanie… W trakcie realizacji: %1$d%% Kończę… - Kompletny! + Ukończono! Ukryj wygasłe wpisy Wygasłe wpisy nie są wyświetlane Kontakt @@ -420,7 +420,7 @@ Ukryj uszkodzone łącza do bazy danych Ukryj uszkodzone łącza na liście najnowszych baz danych Przyznaj dostęp do zapisu pliku, aby zapisać zmiany w bazie danych - Wkład + Wsparcie finansowe Skonfiguruj zarządzanie hasłem jednorazowym (HOTP / TOTP), aby wygenerować token wymagany do uwierzytelniania dwuskładnikowego (2FA). Konfiguracja OTP Nie można utworzyć pliku bazy danych. @@ -451,7 +451,7 @@ Przełącz klawiaturę Prześlij %1$s Prześlij załącznik do wpisu, aby zapisać ważne dane zewnętrzne. - Dodawanie załącznika + Dodaj załącznik Czy mimo to dodać plik\? Przesłanie tego pliku spowoduje zastąpienie istniejącego. Baza danych KeePass powinna zawierać tylko małe pliki narzędziowe (takie jak pliki kluczy PGP). @@ -523,9 +523,9 @@ Otwórz monit odblokowania zaawansowanego, aby przechowywać poświadczenia Otwórz monit odblokowania zaawansowanego, aby odblokować bazę danych Dostęp do pliku odwołany przez menedżera plików, zamknij bazę danych i otwórz ją ponownie z jej lokalizacji. - Scal dane, zastąp modyfikacje zewnętrzne poprzez zapisanie bazy danych lub ponownie załaduj ją z najnowszymi zmianam. + Scal dane, zastąp modyfikacje zewnętrzne poprzez zapisanie bazy danych lub ponownie załaduj ją z najnowszymi zmianami. Informacje zawarte w pliku bazy danych zostały zmodyfikowane poza aplikacją. - Ponownie załaduj dane + Przeładuj dane GiB MiB KiB @@ -543,13 +543,13 @@ Dane pliku już istnieją. Właściwości Błąd podczas eksportowania właściwości aplikacji - Wyeksportowano właściwości aplikacji + Eksportowano właściwości aplikacji Błąd podczas importowania właściwości aplikacji - Zaimportowano właściwości aplikacji + Importowano właściwości aplikacji Właściwości KeePassDX do zarządzania ustawieniami aplikacji - Utwórz plik, aby wyeksportować właściwości aplikacji + Utwórz plik, aby eksportować właściwości aplikacji Eksportuj właściwości aplikacji - Wybierz plik, aby zaimportować właściwości aplikacji + Wybierz plik, aby importować właściwości aplikacji Importuj właściwości aplikacji Wystąpił błąd podczas wykonywania akcji w bazie danych. Nie możesz tutaj przenieść grupy. @@ -605,7 +605,7 @@ Kolory wpisu Hash pliku nie jest gwarantowany, ponieważ system Android może zmieniać swoje dane w locie. Zmień rozszerzenie pliku na .bin, aby uzyskać prawidłową integralność. Nie wyłączaj ekranu podczas oglądania wpisu - Znaczniki + Etykiety Nie wyłączaj ekranu Wyświetla kolory pierwszego planu i tła wpisu Nagłówek nawigacyjny @@ -617,11 +617,11 @@ Sekwencja automatycznego wpisywania Obecna grupa Dane niestandardowe - Scal z… + Scal z … Filtry wyszukiwania Automatyczne wpisywanie Przeszukiwalne - Zapisz kopię w… + Zapisz kopię w … Wygasłe Baza danych jest już otwarta, należy ją najpierw zamknąć, aby otworzyć nową Ta funkcja umożliwia przechowywanie zaszyfrowanych danych uwierzytelniających w bezpiecznym magazynie kluczy urządzenia. From 0645fbe938a90ddfb488fa9be0f909bc6c84c3ad Mon Sep 17 00:00:00 2001 From: Abhi Date: Wed, 16 Nov 2022 13:25:32 +0000 Subject: [PATCH 14/49] Translated using Weblate (Malayalam) Currently translated at 60.6% (383 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ml/ --- app/src/main/res/values-ml/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 6a0ff38eb..c0af5a07f 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -224,7 +224,7 @@ ഇവിടെ ഒരു എൻട്രി നീക്കാൻ കഴിയില്ല. Autofill service could not be activated. ക്ലിപ്പ്ബോർഡ് ടൈംഔട്ട് - ആപ്പ് ടൈംഔട്ട് + സമയം അധിക്രമിക്കുക ഹിസ്റ്ററി വീണ്ടെടുക്കുക കാലഹരണപ്പെടുന്നു വൈബ്രേറ്ററി കീപ്രസ്സ് From 9b3c751a49ea1a5447248dbfd7a47e888c8b4691 Mon Sep 17 00:00:00 2001 From: WB Date: Fri, 18 Nov 2022 19:33:39 +0000 Subject: [PATCH 15/49] Translated using Weblate (Galician) Currently translated at 80.1% (506 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/gl/ --- app/src/main/res/values-gl/strings.xml | 89 +++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 33d410124..cee9b0603 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -19,7 +19,7 @@ --> Comentarios Páxina inicial - KeePassDX é unha implementación para Android do xestor de contrasinais KeePass. + KeePassDX é unha implementación para Android do xestor de contrasinais KeePass Aceptar Engadir entrada Engadir grupo @@ -455,4 +455,91 @@ Borrar claves de cifrado Non foi posíbel encontrar o hardware correspondente. Ruta + Renovación recomendada + Notificación + Limpar ao fechar + Cor personalizada da base de datos + Modelos + Teclado + Aparencia + Son ao presionar teclas + %1$s + Mudar de teclado + Retroceder + Acción da tecla automática + Fechar base de datos + Selección manual + Configuración do teclado do dispositivo + Active un teclado personalizado para os seus contrasinais e todos os campos de identidade + Pantalla de credencias da base de datos + Reiniciar a aplicación que contén o formulario para activar o bloqueo. + Entrada + Tema do teclado + Teclas + Acción de tecla automática + Acción da tecla \"Ir\" após presionar unha tecla \"Campo\" + Pantalla de procura + Campos personalizados + Volver ao teclado anterior + Tentar mostrar suxestións de autocompletado directamente desde un teclado compatíbel + Mostrar opción para permitir ao usuario seleccionar a entrada da base de datos + Lista de bloqueo dos dominios web + Bloquear autocompletado + Confiar no portapapeis + Cambiar a fonte usada nos campos para mellorar a visibilidade dos caracteres + Permitir copiar o contrasinal e protexer os campos no portapapeis + Aviso: O portapapeis é compartillado con todas as aplicacións. Se datos sensíbeis foren copiados, outro programas poderían lelos. + Nome da base de datos + Descrición da base de datos + Tentar gardar información compartillada ao facer unha selección manual de entradas para facilitar usos futuros + Interface + Mover grupos e entradas na papeleira de reciclaxe antes de eliminalos + Uso da papeleira de reciclaxe + Grupo da papeleira de reciclaxe + Uso de modelos + Use modelos dinámicos para completar os campos dunha entrada + Número máximo + Limitar o número de elementos no historial por entrada + Tamaño máximo + Limitar o tamaño do historial por entrada + Recomendar cambiar a clave mestra (días) + Forzar renovación + Forzar renovación da clave mestra (días) + Forzar renovación a próxima vez + Forzar cambio da clave mestra a próxima vez (unha vez) + Tipo de letra dos campos + Habilitar + Deshabilitar + Bloquear a base de datos cando a duración do portapapeis expire ou cando a notificación for fechada despois de utilizala + Nome do usuario predefinido + Versión da base de datos + Texto + Outros + Compresión + Ningunha + Gzip + Papeleira de reciclaxe + Magikeyboard + Entrada + Selección da entrada + Información da notificación + Limpar ao fechar + Tempo límite + Tempo límite para limpar a entrada do teclado + Vibrar ao presionar teclas + Cambiar automaticamente ao teclado anterior na pantalla da base de datos + Bloquear base de datos + Seleccionar entrada + Fechar a base de datos após autocompletar a selección + Suxestións dentro da liña + Gardar información de procura + Gardar información compartillada + Mostrar unha notificación cando a entrada estiver dispoñíbel + Grupo de modelos + MagiKeyboard + Fechar a base de datos ao fechar a notificación + Cambiar automaticamente ao teclado previo na pantalla de procura + Tentar gardar informacións de procuras ao facer unha selección manual da entrada para usos futuros + Lista de bloqueo das aplicacións + Lista de bloqueo sen permiso para autocompletar automaticamente \ No newline at end of file From b3aab27c9ba54453abd94eaba581996af034d068 Mon Sep 17 00:00:00 2001 From: WB Date: Thu, 24 Nov 2022 13:45:18 +0000 Subject: [PATCH 16/49] Translated using Weblate (Galician) Currently translated at 88.7% (560 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/gl/ --- app/src/main/res/values-gl/strings.xml | 63 ++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index cee9b0603..2add32c6a 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -542,4 +542,67 @@ Tentar gardar informacións de procuras ao facer unha selección manual da entrada para usos futuros Lista de bloqueo das aplicacións Lista de bloqueo sen permiso para autocompletar automaticamente + Abra o seu arquivo de base de datos dende o seu explorador de ficheiros para usalo. + Os campos copiados poden ser pegados en calquer lado. +\n +\nUse un método de completado de formularios da súa escolla. + Bloquear base de datos + Ao ver unha entrada en KeePassDX, completar con esta o Magikeyboard + Mudar automaticamente ao teclado previo despois de bloquear a base de datos + Pedir para gardar datos + Non é posíbel gardar nunha base datos aberta en modo só lectura. + Pedir para gardar datos cando terminar de autocompletar un formulario + Borrar o contrasinal introducido após un intento de conexión a unha base de datos + Restabelecer suxestións educativas + Desbloqueo avanzado da base de datos + Ligue o seu contrasinal á súa credencial biométrica ou credenciais do dispositivo para desbloquear rapidamente a súa base de datos. + Gardar base de datos automaticamente + Manter a pantalla acesa + Permitir pulsar o botón \"Abrir\" se non seleccionar ningunha credencial + Só lectura + Destacar elementos para saber como funciona a aplicación + Suxestións educativas restabelecidas + Crear o teu arquivo de base de datos + Cree o seu primeiro arquivo de xestión de contrasinais. + Abrir unha base de datos existente + Engadir elementos á súa base de datos + As entradas axudan a xestionar as súas identidades dixitais. +\n +\nOs grupos (~cartafois) organizan entradas na súa base de datos. + Procurar nas entradas + Introduza título, nome de usuario ou outros campos para recuperar os seus contrasinais. + Editar a entrada + Rexistre un campo adicional, engada un valor e opcionalmente protéxao + Engadir un anexo + Configurar OTP + Introduza un contrasinal e/ou un arquivo para desbloquear a súa base de datos. +\n +\nFaga unha copia de seguranza da súa base de datos nun lugar seguro despois de cada cambio. + Protexa a base de datos contra escritura + Cambie o modo de apertura da sesión. +\n +\n\"Protección contra escritura\" evita cambios non desexados na base de datos. +\n\"Modificábel\" permite engadir, borrar, ou modificar todos os elementos. + Copia un campo + Enter + Abrir petición automaticamente + Magikeyboard (KeePassDX) + Configuración do Magikeyboard + Mudar automaticamente para o teclado previo após executar \"Acción de tecla automática\" + Permitir ás aplicacións de terceiros gravar ou tomar capturas na aplicación + Suxestións educativas + Mostrar suxestións educativas outra vez + Crear un contrasinal forte + Engadir campos personalizados + Completado de formularios + %1$s dispoñíbel no Magikeyboard + Abrir a base de datos en modo de só lectura por defecto + Configure a xestión do contrasinal dun só uso (HOTP / TOTP) para xerar un token solicitado para a autenticación de dous factores (2FA). + Desbloquee a súa base de datos + Eliminar contrasinal + Engadidas suxestións de autocompletado. + Non permitir clave mestra + Gardar a base de datos após unha acción importante (en modo \"Modificábel\") + Manter a pantalla acesa ao ver unha entrada + Modo captura de pantalla \ No newline at end of file From 39ff112b42342b192b9089f4efb7c7e8d4ef5768 Mon Sep 17 00:00:00 2001 From: WaldiS Date: Fri, 25 Nov 2022 17:08:02 +0000 Subject: [PATCH 17/49] Translated using Weblate (Polish) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/pl/ --- app/src/main/res/values-pl/strings.xml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 79245c831..e624e1d68 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -27,7 +27,7 @@ Koniec czasu Czas bezczynności przed zablokowaniem bazy danych Aplikacja - Ustawienia aplikacji + Ustawienia ogólne Nawiasy Do tworzenia, otwierania i zapisywania plików bazy danych potrzebny jest menedżer plików, który akceptuje działanie Intent Action ACTION_CREATE_DOCUMENT i ACTION_OPEN_DOCUMENT. Schowek został wyczyszczony @@ -108,7 +108,7 @@ Dodatkowe rundy szyfrowania zapewniają lepszą ochronę przed atakami typu brute force, ale mogą znacznie spowolnić ładowanie i zapisywanie. Zapisywanie bazy danych… Spacja - Porządek naturalny + Porządek domyślny Znaki specjalne Szukaj Podkreślenie @@ -153,7 +153,7 @@ Chroniony przed zapisem Modyfikowalne Ochrona - Chroniony przed zapisem + Ochrona przed zapisem KeePassDX potrzebuje uprawnień do zapisu, aby mógł modyfikować bazę danych. Algorytm szyfrowania bazy danych używany dla wszystkich danych Aby wygenerować klucz dla algorytmu szyfrowania, klucz główny jest transformowany przy użyciu losowo solonej funkcji wyprowadzania klucza. @@ -169,13 +169,13 @@ Dostęp Ostrzeżenie Unikaj znaków hasła spoza formatu kodowania tekstu w pliku bazy danych (nierozpoznane znaki są konwertowane na tę samą literę). - Kosz na dole + Pokaż Kosz na dole listy Tytuł Kontynuować bez ochrony odblokowującej hasło\? Kontynuować bez klucza szyfrowania\? Wersja %1$s Zapisano zaszyfrowane hasło - Grupy poprzednie + Pokaż Grupy na górze listy Baza danych nie ma jeszcze hasła. Historia Wygląd @@ -190,7 +190,7 @@ Znaki hasła Ustaw dozwolone znaki generatora haseł Schowek - Powiadomienia ze schowka + Powiadomienia schowka Pokaż powiadomienia schowka, aby skopiować pola podczas przeglądania wpisu Jeśli automatyczne usuwanie schowka nie powiedzie się, ręcznie usuń jego historię. Zablokuj bazę danych @@ -212,7 +212,7 @@ Przenosi grupy i wpisy do grupy \"Kosz\" przed usunięciem Czcionka pola Zmień czcionkę użytą w polach, aby poprawić widoczność znaków - Zaufanie do schowka + Ochrona schowka Zezwalanie na kopiowanie hasła wejściowego i chronionych pól do schowka Ostrzeżenie: Schowek jest współużytkowany przez wszystkie aplikacje. Jeśli poufne dane są kopiowane, inne oprogramowanie może je odzyskać. Nazwa bazy danych @@ -370,7 +370,7 @@ Żadna Gzip Ustawienia klawiatury urządzenia - Nieprawidłowy klucz tajny OTP. + "Nieprawidłowy klucz OTP." Należy ustawić co najmniej jedno poświadczenie. Klucz tajny musi być w formacie Base32. Licznik musi być między %1$d a %2$d. @@ -415,7 +415,7 @@ Śledzi, gdzie przechowywane są bazy danych Zapamiętaj lokalizacje plików kluczy Śledzi, gdzie przechowywane są pliki z kluczami - Pokaż najnowsze pliki + Pokaż ostatnie pliki Pokaż lokalizacje najnowszych baz danych Ukryj uszkodzone łącza do bazy danych Ukryj uszkodzone łącza na liście najnowszych baz danych @@ -467,7 +467,7 @@ Informacje o poświadczeniach Wyświetla identyfikator UUID powiązany z wpisem lub grupą Pokaż UUID - Zapisywanie danych nie jest dozwolone dla bazy danych otwartej jako tylko do odczytu. + Zapisywanie danych nie jest dozwolone dla bazy danych otwartej tylko do odczytu. Pytaj o zapisanie danych po zakończeniu wypełniania formularza Pytaj o zapisanie danych Staraj się zapisywać informacje wyszukiwania podczas dokonywania ręcznego wyboru wpisu, aby ułatwić sobie przyszłe użycie @@ -497,7 +497,7 @@ Odblokowywanie uwierzytelniające urządzenia Uwierzytelnienie urządzenia Wpisz hasło, a następnie kliknij ten przycisk. - Nie można rozpoznać zaawansowanego wydruku odblokowującego + Nie można rozpoznać wprowadzonych danych odblokowujących Nie można odczytać zaawansowanego klucza odblokowującego. Usuń go i powtórz procedurę rozpoznawania odblokowania. Wyodrębnij poświadczenia bazy danych z zaawansowanymi danymi odblokowującymi Jeśli używasz zaawansowanego rozpoznawania odblokowania, nadal musisz zapamiętać główne dane uwierzytelniające. @@ -588,7 +588,7 @@ Posiadacz Karta debetowa / kredytowa Szablony - Wyświetla tokeny OTP na liście wpisów + Pokaż tokeny OTP na liście wpisów Pokaż token OTP Ikona zewnętrzna Wyświetl opcję pozwalającą użytkownikowi wybrać wpis bazy danych From a745ed1c2824f41acd1fce86334f2f194d1d278b Mon Sep 17 00:00:00 2001 From: Matthaiks Date: Fri, 25 Nov 2022 19:13:07 +0000 Subject: [PATCH 18/49] Translated using Weblate (Polish) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/pl/ --- app/src/main/res/values-pl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index e624e1d68..d8e00736e 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -370,7 +370,7 @@ Żadna Gzip Ustawienia klawiatury urządzenia - "Nieprawidłowy klucz OTP." + Nieprawidłowy klucz OTP. Należy ustawić co najmniej jedno poświadczenie. Klucz tajny musi być w formacie Base32. Licznik musi być między %1$d a %2$d. From 1a3baa6523750e5af685adbed8ef3bfc126a8337 Mon Sep 17 00:00:00 2001 From: Yudong <1939245371@qq.com> Date: Sat, 3 Dec 2022 15:00:24 +0000 Subject: [PATCH 19/49] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/zh_Hans/ --- app/src/main/res/values-zh-rCN/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 121d426e1..d8000ffc0 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -56,7 +56,7 @@ 网址 用户名 不支持Arcfour流式加密。 - 无法在KeePassDX中处理此URI。 + 无法在 KeePassDX 中处理此 URI 。 无法新建文件 无法读取数据库。 请确保路径正确。 @@ -311,7 +311,7 @@ 剪贴板持续时间过期或通知在您开始使用后关闭时,锁定数据库 回收站 条目选择 - 在KeePass DX中查看条目时,用该条目填充 Magikeyboard + 在 KeePass DX 中查看条目时,用该条目填充 Magikeyboard 删除密码 在尝试连接数据库后删除输入的密码 打开文件 From 9b5a95a10facca40fc039f8cd3a02aa787ccfe33 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 5 Dec 2022 08:00:37 +0000 Subject: [PATCH 20/49] Translated using Weblate (German) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/de/ --- app/src/main/res/values-de/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index d58acea77..bb789de49 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -250,7 +250,7 @@ Auswählen, wie Einträge und Gruppen sortiert werden. Mitmachen Mithelfen, um Stabilität und Sicherheit zu verbessern sowie weitere Funktionen zu ermöglichen. - Anders als viele andere Passwortmanager ist dieser <strong>werbefrei</strong>, <strong>quelloffen</strong> und unter einer <strong>Copyleft-Lizenz</strong>. Es werden keine persönlichen Daten gesammelt, in welcher Form auch immer, unabhängig von der verwendeten Version (kostenlos oder Pro). + Anders als viele andere Passwortmanager ist dieser werbefrei, quelloffen und unter einer Copyleft-Lizenz. Es werden keine persönlichen Daten gesammelt, egal in welcher Form, unabhängig von der verwendeten Version (kostenlos oder Pro). Mit dem Kauf der Pro-Version erhalten Sie Zugriff auf diesen <strong>visuellen Stil</strong> und unterstützen insbesondere <strong>die Umsetzung gemeinschaftlicher Projekte.</strong> Dieser <strong>visuelle Stil</strong> ist dank Ihrer Großzügigkeit verfügbar. Um unsere Freiheit zu bewahren und immer aktiv zu bleiben, zählen wir auf Ihren <strong>Beitrag.</strong> @@ -350,7 +350,7 @@ Aktualisieren Felder schließen Die Datenbank kann mit diesem Passwort und dieser Schlüsseldatei nicht erstellt werden. - Modernes Entsperren + Erweitertes Entsperren Biometrisch Aktivieren Deaktivieren @@ -454,7 +454,7 @@ Diese Bezeichnung existiert bereits. Starten Sie die Anwendung, die das Formular enthält, neu, um die Sperrung zu aktivieren. Automatisches Ausfüllen sperren - Liste der Domains, auf denen ein automatisches Ausfüllen verhindert wird + Liste der Domains, für die ein automatisches Ausfüllen verhindert wird Liste gesperrter Web-Domains Liste der Apps, in denen ein automatisches Ausfüllen verhindert wird Liste gesperrter Anwendungen @@ -517,7 +517,7 @@ Laufzeit der modernen Entsperrung, bevor ihr Inhalt gelöscht wird Verfall der modernen Entsperrung Keine zur modernen Entsperrung verwendeten, verschlüsselten Inhalte speichern - Befristete moderne Entsperrung + Temporäre erweiterte Entsperrung Ermöglicht das Öffnen der Datenbank mit Ihren Geräte-Anmeldeinformationen Drücken, um Schlüssel für modernes Entsperren zu löschen Inhalt @@ -672,7 +672,7 @@ Der Schlüssel darf nicht leer sein. Die Datei ist beschädigt. Die Response-Antwort kann nicht abgerufen werden. - Die Challenge-Aufgabe wurde bereits angefordert. + Die Challenge wurde bereits angefordert. Die Response-Antwort wurde bereits übertragen. Screenshot-Modus Erlauben Sie Apps von Drittanbietern, Screenshots der Anwendung aufzuzeichnen oder zu erstellen From 72ef0f2f3fa52dc931377c6a5617672e071b4814 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Wed, 7 Dec 2022 12:34:56 +0100 Subject: [PATCH 21/49] Added translation using Weblate (Albanian) --- app/src/main/res/values-sq/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-sq/strings.xml diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/app/src/main/res/values-sq/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From c64b4b8d62c1ce4cce00284c487c969496cd4910 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Wed, 7 Dec 2022 11:41:30 +0000 Subject: [PATCH 22/49] Translated using Weblate (Albanian) Currently translated at 5.8% (37 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/sq/ --- app/src/main/res/values-sq/strings.xml | 40 +++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index a6b3daec9..81026bcda 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -1,2 +1,40 @@ - \ No newline at end of file + + Përpunoni zë + Bazë të dhënash + Shënime + Veti + Fjalëkalim + Rrënjë + Kujdes + Kyçe bazën e të dhënave + Ndrysho kyçin e përgjithshëm + Grupi i tanishëm + + Vetë-Shtype + Historik + Shtoni zë + Përpunim + Hiqe + Bashkëngjitje + Ruaje + Hape + Fshije + Skadon më + Shto grup + Aktivizoje + Çaktivizoje + Emër + Kërko + Emër përdoruesi + URL + Titull + Mbi + Mbylle bazën e të dhënave + Rregullime baze të dhënash + Rregullime + Pranoje + Ndjeshmëri ndaj shkrimi me të mëdha/të vogla + Të përgjithshme + Siguri + \ No newline at end of file From 4eee9e95c46f48dff9966f68ca6fb4985018ea7e Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Wed, 7 Dec 2022 12:28:59 +0000 Subject: [PATCH 23/49] Translated using Weblate (Albanian) Currently translated at 54.5% (344 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/sq/ --- app/src/main/res/values-sq/strings.xml | 311 ++++++++++++++++++++++++- 1 file changed, 309 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index 81026bcda..28d2c4e2e 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -8,13 +8,13 @@ Rrënjë Kujdes Kyçe bazën e të dhënave - Ndrysho kyçin e përgjithshëm + Ndryshoni kyçin e përgjithshëm Grupi i tanishëm Vetë-Shtype Historik Shtoni zë - Përpunim + Përpunojeni Hiqe Bashkëngjitje Ruaje @@ -37,4 +37,311 @@ Ndjeshmëri ndaj shkrimi me të mëdha/të vogla Të përgjithshme Siguri + Kontribut + Përshtypje + Lejoje + Shtoni nyjë + Shtoni fushë + Gjedhe + Përdorur më + Krijuar më + UUID + Algoritëm + Version + Dhuroni + Ngjite + Raunde shndërrimi + Përdorim kujtese + Paralelizëm + Leje + Shtypni fjalëkalimin dhe mandej klikoni mbi këtë buton. + Biometrik + Fshi kyçe fshehtëzimi + Emër kartele + Njoftim + Ngjeshje + Asnjë + Përzgjedhje dorazi + Shumë faleminderit për kontributin tuaj. + Po punojmë fort për ta hedhur sa më shpejt në qarkullim këtë veçori. + Kontribuoni + Ngarko %1$s + Po gatitet… + Kontakt + Faqe hyrëse + Shtoni zë + Shto grup + Kyç i përgjithshëm + Fshehtëzim + Algoritëm fshehtëzimi + Mbarim kohe + Kohë plogështie para se të kyçet baza e të dhënave + Aplikacion + U spastrua e papastra + Gabim të papastre + S’u spastrua dot e papastra + Mbarim kohe për të papastrën + Sfond + Hape kartelën + Shtoni objekt + Hollësi kartele + Hollësi kredencialesh + Hollësi fjalëkalimi për një herë + Kutizë fjalëkalimi + Ikonë zëri + Ngjyrë baze të dhënash + Vleftësoje + Të hidhen tej ndryshimet\? + Hidhe tej + Prodhues fjalëkalimesh + Gjatësi fjalëkalimi + Numër fjalësh frazëkalimi + Shtoni bashkëngjitje + Hiqe fushën + Përditësim + Mbylli fushat + Po merret kyç baze të dhënash… + Po shfshehtëzohet bazë të dhënash… + Përdore si bazën parazgjedhje të të dhënave + Shifra + Anuloje + Ripohoni fjalëkalimin + Skaduar + Historik + Kartelë kyçi + Ndryshuar më + Trashëgoje + Sekuencë vetë-shtypjeje + S’u gjetën të dhëna zëri. + Fjalëkalim + Etiketa + Të dhënave vetjake + Titull + Ujdisni fjalëkalimin për një herë + Lloj OTP-je + E fshehtë + Periudhë (sekonda) + Numërator + Shifra + Shprehje e rregullt + Kartë Debiti / Krediti + Mbajtës + Numër + CVV + PIN + Kartë ID + Datë hedhjeje në qarkullim + Email + Adresë email + Wi-Fi + SSID + Kuletë kriptomonedhash + Token + Kyç publik + Kyç privat + Llogari + Bankë + Emër banke + SWIFT / BIC + IBAN + Shënim i Sigurt + Anëtarësi + Standard + Gjedhe + OTP + Emër përdoruesi + S’u krijua dot kartelë + S’u lexua dot baza e të dhënave. + E fshehtë OTP e pavlefshme. + Jepni një emër. + Përzgjidhni një kartelë kyçesh. + Përzgjidhni një kyç hardware. + S’u ngarkua dot baza e të dhënave. + Duhet ujdisur të paktën një kredencial. + Fjalëkalimet s’përputhen. + Ka tashmë një etiketë të tillë. + S’mund të lëvizni një grup për këtu. + S’mund të lëvizni një zë për këtu. + S’mund të kopjoni zë këtu. + S’mund të kopjoni grup këtu. + S’arrihet të krijohet kartelë baze të dhënash. + S’u ruajt dot baza e të dhënave. + E fshehta duhet të jetë nën formatin Base32. + Emri i kartelës ekziston tashmë. + S’arrihet të rikrijohet saktë lista. + Kartela që po provoni të dërgoni është shumë e madhe. + Të dhënat e kartelës ekzistojnë tashmë. + Ndodhi një gabim teksa hiqeshin të dhëna kartele. + Ndodhi një gabim teksa kryhej një veprim te baza e të dhënave. + Anuluar nga përdoruesi. + S’arrihet të përzihet që prej një baze të dhënash V1. + Emër fushe + Vlerë fushe + Kartelë e dëmtuar. + Përgjegjës kartelash + Prodho fjalëkalim + Ripohoni fjalëkalimin + Fjalëkalim i prodhuar + Emër grupi + Emër ikone + Kyçi s’mund të jetë i zbrazët. + Kartelë kyçi + Gjatësi + Fjalëkalim + Frazëkalim + Algoritëm i gabuar. + S’u kuptua dot formati i bazës së të dhënave. + Kartela e kyçit është e zbrazët. + Gjatësi + Fshihi fjalëkalimet + Si parazgjedhje, maskoji fjalëkalimet (***) + Ngjyrosi fjalëkalimet + Shfaq emra përdoruesi + Shfaq numër zërash + Shfaq Token OTP + Shfaq UUID + Shfaq numrin e zërave në një grup + Po krijohet bazë të dhënash… + Po ngarkohet baza e të dhënave… + Të vogla + Kopje e %1$s + Rregullime aplikacioni + Shkyçje e thelluar + Rregullime sigurie + Rregullime kyçi të përgjithshëm + Kopjoje + Anuloje + Fshihe fjalëkalimin + Kyçe bazën e të dhënave + Ruaji të dhënat + Ringarko të dhënat + Ruaj një kopje te … + Kërko + Shfaqe fjalëkalimin + Kalo te URL-ja + Zbraz koshin e riciklimeve + Rikthe historikun + Fshije historikun + Minus + Kurrë + S’ka përfundime kërkimi + Që të hapni këtë URL, instaloni një shfletues. + Hap bazë ekzistuese të dhënash + Krijoni bazë të re të dhënash + Kërkim i shpejtë + Po krijohet bazë e re të dhënash… + Po punohet… + Mbrojtje + Baza e të dhënave përmban UUID-ra të përsëdytur. + Mënyrë përzgjedhjeje + Mënyrë regjistrimi + Mbaj mend vendndodhje bazash të dhënash + Mbaj mend vendndodhje kartelash kyçesh + Shfaq kartelë të freskëta + Shfaq vendndodhje bazash të dhënash së fundi + Fshih lidhje të dëmtuara baze të dhënash + Importo veti aplikacioni + Përzgjidhni një kartelë që të importohen veti aplikacionesh + Po ruhet bazë të dhënash… + Mos e asgjëso aplikacionin… + Hapësirë + Renditi + Grupe përpara + Krijim + Ndryshim më + Hapur më + Special + Nënvijë + Version i pambuluar baze të dhënash. + Të mëdha + Të vazhdohet pa kyç fshehtëzimi\? + Të shtohet kartela, sido qoftë\? + Të hiqen këto të dhëna, sido qoftë\? + Version %1$s + Dukje + Kredenciale pajisjeje + Hyni me KeePassDX + Përzgjidhni zë… + Madhësi fjalëkalimi të prodhuar + Baza e të dhënave u hap + E papastër + Kyçe + Kyçje ekrani + Shfaq buton kyçjesh + Lëndë + Shkyçje e thelluar + Shteg + Caktoni një kyç të përgjithshëm + Të dhëna + Ngjeshje të dhënash + Përdorim koshi riciklimesh + Përdorim gjedhesh + Numër maksimum + Madhësi maksimum + Emër baze të dhënash + Përshkrim baze të dhënash + Emër parazgjedhje përdoruesi + Ngjyrë vetjake baze të dhënash + Version baze të dhënash + Tekst + Ndërfaqe + Tjetër + Gzip + Kosh riciklimesh + Gjedhe + Tastierë + Magikeyboard + Magikeyboard + Magikeyboard (KeePassDX) + Rregullime për Magikeyboard + + Përzgjedhje zërash + Shfaq një njoftim, kur ka një zë + Mbarim kohe + %1$s + Dukje + Kyçe + Shtypje të dëgjueshme tastesh + Ndërroni tastierë + Skenë kredencialesh baze të dhënash + Fusha vetjake + Përzgjidhni zë + Listë bllokimi aplikacionesh + Mos lejo kyç të përgjithshëm + Fshije fjalëkalimin + Vetëruaj bazë të dhënash + Krijoni kartelën e bazës tuaj të të dhënave + Hapni një bazë ekzistuese të dhënash + Shtoni objekte te baza juaj e të dhënave + Kërkoni nëpër zëra + Përpunoni zërin + Krijoni një fjalëkalim të fuqishëm + Shtoni fusha vetjake + Shtoni bashkëngjitje + Shkyçni bazën tuaj të të dhënave + Aplikoni mbrojtje nga shkrimi për bazën tuaj të të dhënave + Kopjoni një fushë + Kyçe bazën e të dhënave + Merrni pjesë + Në ecuri e sipër: %1$d %% + Po përfundohet… + B + KiB + MiB + GiB + Të paktën një shenjë nga secili + Përjashto shenja të dykuptimta + Ndarës + Të vogla + TË MËDHA + Numër shenjash: %1$d + Temë aplikacioni + Temë e përdorur te aplikacioni + Ndriçim teme + Standarde + Vetjake + Paketë ikonash + Ngjyra zërash + Fshihi zërat e skaduar + XML e keqformuar. \ No newline at end of file From ccd8467cbaddd74dd3c3ac64da434cc197f13de1 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Wed, 7 Dec 2022 16:49:00 +0000 Subject: [PATCH 24/49] Translated using Weblate (Albanian) Currently translated at 57.3% (362 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/sq/ --- app/src/main/res/values-sq/strings.xml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index 28d2c4e2e..ab3cebcbd 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -332,7 +332,7 @@ Të paktën një shenjë nga secili Përjashto shenja të dykuptimta Ndarës - Të vogla + të vogla TË MËDHA Numër shenjash: %1$d Temë aplikacioni @@ -344,4 +344,22 @@ Ngjyra zërash Fshihi zërat e skaduar XML e keqformuar. + Gabim shkyçjeje të thelluar: %1$s + Blloko vetëplotësim + Lejon prekjen e butoni “Hape”, nëse s’janë përzgjedhur kredenciale + Sendërtim për Android i përgjegjësit KeePass të fjalëkalimeve + Kërko një kërkim, kur hapet një bazë të dhënash + Ngarkimi i kësaj kartele do të zëvendësojë atë ekzistuesen. + Vetëplotësoje + Prekeni që të fshihen kyçe shkyçjeje të thelluar + Shkyçje biometrike + Ju lejon të skanoni elementë biometrikë për të hapur bazën e të dhënave + Fshi krejt kyçet e fshehtëzimit të lidhur me njohje shkyçjesh të thelluaara + Të fshihen krejt kyçet e fshehtëzimit të lidhur me njohje shkyçjesh të thelluara\? + Mbrapsht te tastiera e mëparshme + Tasti “Backspace” + Pyet të ruhen të dhënat + Pyet për ruajtje të dhënash, kur plotësohet mbushja e një formulari + Listë bllokimesh që pengon vetëplotësim nga aplikacione + Listë bllokimesh përkatësish Web \ No newline at end of file From 04c4c82953a705570804d670be99761636e79f34 Mon Sep 17 00:00:00 2001 From: VfBFan Date: Fri, 9 Dec 2022 07:51:22 +0000 Subject: [PATCH 25/49] Translated using Weblate (German) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/de/ --- app/src/main/res/values-de/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index bb789de49..996158c2f 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -350,7 +350,7 @@ Aktualisieren Felder schließen Die Datenbank kann mit diesem Passwort und dieser Schlüsseldatei nicht erstellt werden. - Erweitertes Entsperren + Modernes Entsperren Biometrisch Aktivieren Deaktivieren @@ -517,7 +517,7 @@ Laufzeit der modernen Entsperrung, bevor ihr Inhalt gelöscht wird Verfall der modernen Entsperrung Keine zur modernen Entsperrung verwendeten, verschlüsselten Inhalte speichern - Temporäre erweiterte Entsperrung + Befristete moderne Entsperrung Ermöglicht das Öffnen der Datenbank mit Ihren Geräte-Anmeldeinformationen Drücken, um Schlüssel für modernes Entsperren zu löschen Inhalt From 66377ded629bdb3960873ae205ff2bfc1b6b61a6 Mon Sep 17 00:00:00 2001 From: Salih Ail Date: Sat, 17 Dec 2022 03:07:26 +0000 Subject: [PATCH 26/49] Translated using Weblate (Arabic) Currently translated at 75.1% (474 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ar/ --- app/src/main/res/values-ar/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index e0c2796ce..fde125115 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -520,4 +520,6 @@ الإشعارات لا تستخدم أي محتوى معمى لاستخدام فك القفل المتقدم انتهاء صلاحية فك القفل المتقدم + إخفاء الإدخالات منتهية الصلاحية + خانة إختيار مفتاح الجهاز \ No newline at end of file From ecfe767068fc0bc2566650452118ae1dee4d4931 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Sun, 18 Dec 2022 23:46:33 +0100 Subject: [PATCH 27/49] fix: replace error method --- .../activities/FileDatabaseSelectActivity.kt | 13 +-- .../activities/MainCredentialActivity.kt | 85 ++++++++----------- .../database/action/CreateDatabaseRunnable.kt | 3 + .../keepass/database/element/Database.kt | 1 - .../com/kunzisoft/keepass/view/ViewUtil.kt | 8 +- 5 files changed, 43 insertions(+), 67 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt index 0918ce702..e10721e04 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt @@ -67,6 +67,7 @@ import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.tasks.ActionRunnable import com.kunzisoft.keepass.utils.* import com.kunzisoft.keepass.view.asError +import com.kunzisoft.keepass.view.showActionErrorIfNeeded import com.kunzisoft.keepass.viewmodels.DatabaseFilesViewModel import java.io.FileNotFoundException @@ -271,18 +272,8 @@ class FileDatabaseSelectActivity : DatabaseModeActivity(), launchGroupActivityIfLoaded(database) } } - } else { - var resultError = "" - val resultMessage = result.message - // Show error message - if (resultMessage != null && resultMessage.isNotEmpty()) { - resultError = "$resultError $resultMessage" - } - Log.e(TAG, resultError) - Snackbar.make(coordinatorLayout, - resultError, - Snackbar.LENGTH_LONG).asError().show() } + coordinatorLayout.showActionErrorIfNeeded(result) } /** diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/MainCredentialActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/MainCredentialActivity.kt index 2d6312e36..371a321ea 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/MainCredentialActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/MainCredentialActivity.kt @@ -75,6 +75,7 @@ import com.kunzisoft.keepass.utils.MenuUtil import com.kunzisoft.keepass.utils.UriUtil import com.kunzisoft.keepass.view.MainCredentialView import com.kunzisoft.keepass.view.asError +import com.kunzisoft.keepass.view.showActionErrorIfNeeded import com.kunzisoft.keepass.viewmodels.AdvancedUnlockViewModel import com.kunzisoft.keepass.viewmodels.DatabaseFileViewModel import java.io.FileNotFoundException @@ -292,67 +293,49 @@ class MainCredentialActivity : DatabaseModeActivity(), AdvancedUnlockFragment.Bu launchGroupActivityIfLoaded(database) } else { mainCredentialView?.requestPasswordFocus() + // Manage special exceptions + when (result.exception) { + is DuplicateUuidDatabaseException -> { + // Relaunch loading if we need to fix UUID + showLoadDatabaseDuplicateUuidMessage { - var resultError = "" - val resultException = result.exception - val resultMessage = result.message + var databaseUri: Uri? = null + var mainCredential = MainCredential() + var readOnly = true + var cipherEncryptDatabase: CipherEncryptDatabase? = null - if (resultException != null) { - resultError = resultException.getLocalizedMessage(resources) - - when (resultException) { - is DuplicateUuidDatabaseException -> { - // Relaunch loading if we need to fix UUID - showLoadDatabaseDuplicateUuidMessage { - - var databaseUri: Uri? = null - var mainCredential = MainCredential() - var readOnly = true - var cipherEncryptDatabase: CipherEncryptDatabase? = null - - result.data?.let { resultData -> - databaseUri = resultData.getParcelable(DATABASE_URI_KEY) - mainCredential = - resultData.getParcelable(MAIN_CREDENTIAL_KEY) - ?: mainCredential - readOnly = resultData.getBoolean(READ_ONLY_KEY) - cipherEncryptDatabase = - resultData.getParcelable(CIPHER_DATABASE_KEY) - } - - databaseUri?.let { databaseFileUri -> - showProgressDialogAndLoadDatabase( - databaseFileUri, - mainCredential, - readOnly, - cipherEncryptDatabase, - true - ) - } + result.data?.let { resultData -> + databaseUri = resultData.getParcelable(DATABASE_URI_KEY) + mainCredential = + resultData.getParcelable(MAIN_CREDENTIAL_KEY) + ?: mainCredential + readOnly = resultData.getBoolean(READ_ONLY_KEY) + cipherEncryptDatabase = + resultData.getParcelable(CIPHER_DATABASE_KEY) } - } - is FileNotFoundDatabaseException -> { - // Remove this default database inaccessible - if (mDefaultDatabase) { - mDatabaseFileViewModel.removeDefaultDatabase() + + databaseUri?.let { databaseFileUri -> + showProgressDialogAndLoadDatabase( + databaseFileUri, + mainCredential, + readOnly, + cipherEncryptDatabase, + true + ) } } } + is FileNotFoundDatabaseException -> { + // Remove this default database inaccessible + if (mDefaultDatabase) { + mDatabaseFileViewModel.removeDefaultDatabase() + } + } } - - // Show error message - if (resultMessage != null && resultMessage.isNotEmpty()) { - resultError = "$resultError $resultMessage" - } - Log.e(TAG, resultError) - Snackbar.make( - coordinatorLayout, - resultError, - Snackbar.LENGTH_LONG - ).asError().show() } } } + coordinatorLayout.showActionErrorIfNeeded(result) } private fun getUriFromIntent(intent: Intent?) { diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/CreateDatabaseRunnable.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/CreateDatabaseRunnable.kt index fdd1a568b..7707559da 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/CreateDatabaseRunnable.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/CreateDatabaseRunnable.kt @@ -77,6 +77,9 @@ class CreateDatabaseRunnable(context: Context, override fun onFinishRun() { super.onFinishRun() + if (result.isSuccess) { + mDatabase.loaded = true + } createDatabaseResult?.invoke(result) } } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt index f38f7df92..a2d594d8d 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt @@ -555,7 +555,6 @@ class Database { setDatabaseKDBX(newDatabase) this.fileUri = databaseUri // Set Database state - this.loaded = true this.dataModifiedSinceLastLoading = false } diff --git a/app/src/main/java/com/kunzisoft/keepass/view/ViewUtil.kt b/app/src/main/java/com/kunzisoft/keepass/view/ViewUtil.kt index 44182c9ee..f9de51654 100644 --- a/app/src/main/java/com/kunzisoft/keepass/view/ViewUtil.kt +++ b/app/src/main/java/com/kunzisoft/keepass/view/ViewUtil.kt @@ -226,8 +226,8 @@ fun View.updateLockPaddingLeft() { fun Context.showActionErrorIfNeeded(result: ActionRunnable.Result) { if (!result.isSuccess) { - result.exception?.errorId?.let { errorId -> - Toast.makeText(this, errorId, Toast.LENGTH_LONG).show() + result.exception?.getLocalizedMessage(resources)?.let { errorMessage -> + Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show() } ?: result.message?.let { message -> Toast.makeText(this, message, Toast.LENGTH_LONG).show() } @@ -236,8 +236,8 @@ fun Context.showActionErrorIfNeeded(result: ActionRunnable.Result) { fun CoordinatorLayout.showActionErrorIfNeeded(result: ActionRunnable.Result) { if (!result.isSuccess) { - result.exception?.errorId?.let { errorId -> - Snackbar.make(this, errorId, Snackbar.LENGTH_LONG).asError().show() + result.exception?.getLocalizedMessage(resources)?.let { errorMessage -> + Snackbar.make(this, errorMessage, Snackbar.LENGTH_LONG).asError().show() } ?: result.message?.let { message -> Snackbar.make(this, message, Snackbar.LENGTH_LONG).asError().show() } From d049ed39e8da5fa5ee0c49747a9ed98decf35947 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Sun, 18 Dec 2022 23:58:10 +0100 Subject: [PATCH 28/49] fix: upgrade to 3.5.0Beta03 --- CHANGELOG | 1 + app/build.gradle | 4 ++-- .../android/en-US/changelogs/{116.txt => 117.txt} | 5 +++-- fastlane/metadata/android/fr-FR/changelogs/116.txt | 7 ------- fastlane/metadata/android/fr-FR/changelogs/117.txt | 8 ++++++++ 5 files changed, 14 insertions(+), 11 deletions(-) rename fastlane/metadata/android/en-US/changelogs/{116.txt => 117.txt} (69%) delete mode 100644 fastlane/metadata/android/fr-FR/changelogs/116.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/117.txt diff --git a/CHANGELOG b/CHANGELOG index 37c57d066..973ad31d2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -6,6 +6,7 @@ KeePassDX(3.5.0) * Fix attachment download button #1401 * Add monochrome icon #1403 #1404 (Thx @Sandelinos) * Fix lock with back button #1412 #1414 (Thx @ryg-git) + * Vanadium compatibility #1447 (Thx @flawedworld) KeePassDX(3.4.5) * Fix custom data in group (fix KeeShare) #1335 diff --git a/app/build.gradle b/app/build.gradle index 445f5b722..38cb13333 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,8 @@ android { applicationId "com.kunzisoft.keepass" minSdkVersion 15 targetSdkVersion 32 - versionCode = 116 - versionName = "3.5.0Beta02" + versionCode = 117 + versionName = "3.5.0Beta03" multiDexEnabled true testApplicationId = "com.kunzisoft.keepass.tests" diff --git a/fastlane/metadata/android/en-US/changelogs/116.txt b/fastlane/metadata/android/en-US/changelogs/117.txt similarity index 69% rename from fastlane/metadata/android/en-US/changelogs/116.txt rename to fastlane/metadata/android/en-US/changelogs/117.txt index 40aedac28..92413b1ff 100644 --- a/fastlane/metadata/android/en-US/changelogs/116.txt +++ b/fastlane/metadata/android/en-US/changelogs/117.txt @@ -1,7 +1,8 @@ * Support YubiKey challenge-response #8 #137 * Better exception management during database save #1346 * Add "Screenshot mode" setting #459 #1377 #1354 (Thx @GianpaMX) - * Hide clipboard sensitive text when copy entry field #1386 - * Fix attachment download button #1401 + * Hide clipboard sensitive text #1386 + * Fix attachment button #1401 * Add monochrome icon #1403 #1404 (Thx @Sandelinos) * Fix lock with back button #1412 #1414 (Thx @ryg-git) + * Vanadium compatibility #1447 (Thx @flawedworld) diff --git a/fastlane/metadata/android/fr-FR/changelogs/116.txt b/fastlane/metadata/android/fr-FR/changelogs/116.txt deleted file mode 100644 index b1943184d..000000000 --- a/fastlane/metadata/android/fr-FR/changelogs/116.txt +++ /dev/null @@ -1,7 +0,0 @@ - * Support du YubiKey challenge-response #8 #137 - * Meilleure gestion des exceptions durant une sauvegarde de base de données #1346 - * Ajout du "Mode Capture d'Ecran" dans les paramètres #459 #1377 #1354 (Thx @GianpaMX) - * Masquage du texte sensible dans le presse-papiers lors de la copie du champ de saisie #1386 - * Correction du bouton de téléchargement des pièces jointes #1401 - * Ajout de l'icone monochrome #1403 #1404 (Thx @Sandelinos) - * Correction du verrouillage avec le bouton arrière #1412 #1414 (Thx @ryg-git) \ No newline at end of file diff --git a/fastlane/metadata/android/fr-FR/changelogs/117.txt b/fastlane/metadata/android/fr-FR/changelogs/117.txt new file mode 100644 index 000000000..cca13d5f1 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/117.txt @@ -0,0 +1,8 @@ + * Support du YubiKey challenge-response #8 #137 + * Meilleure gestion des exceptions durant une sauvegarde #1346 + * Ajout du "Mode Capture d'Ecran" dans les paramètres #459 #1377 #1354 (Thx @GianpaMX) + * Masquage du texte sensible dans le presse-papiers #1386 + * Correction du bouton des pièces jointes #1401 + * Ajout de l'icone monochrome #1403 #1404 (Thx @Sandelinos) + * Correction du verrouillage avec le bouton arrière #1412 #1414 (Thx @ryg-git) + * Compatibilité de Vanadium #1447 (Thx @flawedworld) From b69a2777697882b0e7311ca3daf3e1d2e521e37a Mon Sep 17 00:00:00 2001 From: WB Date: Sun, 25 Dec 2022 21:07:43 +0000 Subject: [PATCH 29/49] Translated using Weblate (Galician) Currently translated at 97.3% (614 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/gl/ --- app/src/main/res/values-gl/strings.xml | 58 ++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 2add32c6a..585d33cbf 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -605,4 +605,62 @@ Gardar a base de datos após unha acción importante (en modo \"Modificábel\") Manter a pantalla acesa ao ver unha entrada Modo captura de pantalla + Ao mercar a versión pro, terá acceso ao estilo visual e axudará especialmente a realizar proxectos comunitarios. + Ao contribuír, + KiB + Completado! + Entropía: %1$s bit + Número de caracteres: %1$d + Capitalización do Título + Escolla temas claros ou escuros + Paquete de iconos + Mostrar cores de fondo e de primeiro plano nunha entrada + Estamos a traballar para lanzar esta nova funcionalidade o máis rápido posíbel. + Descarregar + Subir %1$s + B + MiB + GiB + Tema usado na aplicación + Brillo do tema + Entradas expiradas non son mostradas + Participe + Axude a aumentar a estabilidade, seguranza e número de funcionalidades. + Este estilo visual está dispoñíbel grazas á súa xenerosidade. + Para manter a nosa liberdade e estarmos sempre activos, contamos coa súa contribución. + Descarregar %1$s + A inicializar… + En progreso: %1$d%% + Entropía: A calcular… + Separador + Ignorar caracteres + minúsculas + MAIÚSCULAS + Cores da entrada + Bloquee a súa base de datos rapidamente. Pode configurar a aplicación para bloqueala despois dun tempo ou cando a pantalla se apague. + Ordenación de elementos + Escolla as entradas e grupos a ordenar. + Esta funcionalidade está en desenvolvemento e precisa da súa contribución para a súa futura dispoñibilidade. + Moitas grazas pola súa contribución. + Lembre manter a súa aplicación actualizada, instalando as novas versións. + Contribuír + Entropía: Alta + Polo menos un carácter de cada un + Excluír caracteres ambiguos + Modo captura de pantalla + Ocultar entradas expiradas + Tema da aplicación + A finalizar… + Estándar + Lista de dominios web bloqueados sen permiso de autocompletado + Cancelado! + Xere un contrasinal forte a asociar coa súa entrada, defínao facilmente segundo os criterios do formulario e non esqueza tornalo seguro. + Suba un anexo á súa entrada para gardar datos externos importantes. + Ao contrario de moitas aplicacións de xestión de contrasinais, esta aplicación non ten anuncios, é un programa de software libre \"copyleft\" e non recolle datos persoais para os seus servidores, sen importar a versión a usar. + Edite a entrada cos campos personalizados. Os conxuntos de datos poden ser referenciados en entradas diferentes. + Considerar caracteres + Personalizado + Cambiar o paquete de iconos da aplicación + Ao comprar a versión pro, + está a incentivar os programadores a crear novas funcionalidades e a corrixir erros reportados. \ No newline at end of file From f1a29af0c6ade7230eefa051e21779eab2143cc8 Mon Sep 17 00:00:00 2001 From: Stephan Paternotte Date: Wed, 28 Dec 2022 14:58:44 +0000 Subject: [PATCH 30/49] Translated using Weblate (Dutch) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/nl/ --- app/src/main/res/values-nl/strings.xml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 3d2b73771..b43ba95f6 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -19,7 +19,7 @@ Dutch translation by Erik Devriendt, corrected by Erik Jan Meijer --> - Reacties + Opmerkingen Startpagina Android-implementatie van KeePass-wachtwoordbeheer Accepteren @@ -27,11 +27,11 @@ Groep toevoegen Versleutelingsalgoritme Time-out - Tijd tot vergrendeling bij inactiviteit + Inactieve tijd tot vergrendeling van de database App App-instellingen Haakjes - Bestandsbeheer dat de Intent-actie ACTION_CREATE_DOCUMENT en ACTION_OPEN_DOCUMENT accepteert, is nodig om databasebestanden aan te maken, te openen en op te slaan. + Een bestandsbeheerder die de actie ACTION_CREATE_DOCUMENT en ACTION_OPEN_DOCUMENT accepteert, is vereist om databasebestanden te maken, openen en opslaan. Klembord gewist Time-out van het klembord Duur van opslag op het klembord (indien ondersteund op dit apparaat) @@ -134,7 +134,7 @@ Toestaan Klembordfout Sommige apparaten staan niet toe dat apps het klembord gebruiken. - Wissen van klembord mislukt + Klembord is niet gewist Geen iteminhoud gevonden. De database is niet geladen. De sleutel kan niet worden geladen. Probeer om het \"geheugengebruik\" van KDF te verminderen. @@ -169,7 +169,7 @@ Sorteren Laagste eerst ↓ Groepen vooraan plaatsen - Prullenbak onderaan plaatsen + Prullenbak onderaan Titel Gebruikersnaam Gecreëerd op @@ -190,7 +190,7 @@ Dienst automatisch aanvullen Schakel de dienst in om formulieren in andere apps in te vullen Gegenereerde wachtwoordlengte - Stel de standaardlengte van gegenereerd wachtwoord in + Stel de standaardlengte van gegenereerde wachtwoorden in Wachtwoordtekens Toegestane wachtwoordtekens instellen Klembord @@ -311,7 +311,7 @@ Vergrendel de database wanneer de gebruiker in het hoofdscherm op de knop Terug klikt Wissen bij afsluiten Vergrendel de database wanneer de duur van het klembord verloopt of de melding wordt gesloten nadat u deze bent gaan gebruiken - Prullenmand + Prullenbak Itemselectie Vul, bij het bekijken van een item in KeePassDX, Magikeyboard met dat item Wachtwoord wissen @@ -322,8 +322,8 @@ Item toevoegen Groep toevoegen Bestandsinformatie - Wachtwoord-selectie - Sleutelbestand-selectie + Wachtwoord-selectievak + Sleutelbestand-selectievak Weergave van het wachtwoord wisselen Item-pictogram Wachtwoordgenerator @@ -403,7 +403,7 @@ Download %1$s Stel eenmalig wachtwoordbeheer (HOTP / TOTP) in om een token te genereren voor tweefactorauthenticatie (2FA). Automatisch opslaan - Prullenbak + Prullenbak-groep Toont de vergrendelknop in de gebruikersinterface Vergrendelknop tonen Instellingen voor automatisch aanvullen @@ -431,7 +431,7 @@ Weggooien Veranderingen ongedaan maken\? Valideren - Bijdragen + Donatie Contact Start de app met het formulier opnieuw op om de blokkering te activeren. Blokkering van automatisch invullen @@ -666,7 +666,7 @@ Houdt de gebruikte fysieke sleutels bij Er worden geen gebruikersgegevens opgehaald , deze applicatie maakt geen verbinding met een server, werkt alleen lokaal en respecteert volledig de privacy van gebruikers. Locatie van database is onbekend, actie kan niet worden uitgevoerd. - Fysieke sleutel-selectie + Fysieke sleutel-selectievak In afwachting van de reactietest-vraag… In afwachting van het reactietest-antwoord… Deze fysieke sleutel wordt niet ondersteund. From 527f734fcf157c9feb7745e85e9a68568649bee3 Mon Sep 17 00:00:00 2001 From: bowornsin Date: Sun, 1 Jan 2023 07:44:30 +0000 Subject: [PATCH 31/49] Translated using Weblate (Thai) Currently translated at 5.5% (35 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/th/ --- app/src/main/res/values-th/strings.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 3a7bc0428..c98c0a2f8 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -35,4 +35,16 @@ รหัสผ่าน ซ่อนรหัสผ่าน ยืนยันรหัสผ่าน + ติดต่อ + เปิดฐานข้อมูลที่มีอยู่แล้ว + การเข้าถึงไฟล์ถูกเพิกถอนโดยตัวจัดการไฟล์ + การเข้าถึงไฟล์ถูกเพิกถอนโดยตัวจัดการไฟล์ ปิดฐานข้อมูลและเปิดใหม่จากตำแหน่งดังกล่าวอีกครั้ง + เปิดไฟล์ฐานข้อมูลที่มีอยู่แล้ว + สรัางไฟล์ฐานข้อมูลของคุณ + สร้างไฟล์ฐานข้อมูลรหัสผ่านแรกของคุณ + ป้อนรหัสผ่าน และ/หรือ Keyfile เพื่อปลดล็อกฐานข้อมูลของคุณ +\n +\n +\nสำรองไฟล์ฐานข้อมูลของคุณในที่ปลอดภัยหลังจากการเปลี่ยนแปลงแต่ละครั้ง + ปลดล็อกฐานข้อมูล \ No newline at end of file From adbdb9a642e2c694c9860d15f8a13a8b5574adba Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Mon, 2 Jan 2023 19:30:19 +0100 Subject: [PATCH 32/49] first code to manage merge with yubikey --- Gemfile.lock | 34 +++++++++---------- .../activities/legacy/DatabaseLockActivity.kt | 11 +++--- .../database/action/DatabaseTaskProvider.kt | 4 ++- .../database/action/MergeDatabaseRunnable.kt | 27 +++++++++------ .../DatabaseTaskNotificationService.kt | 7 +++- .../NestedDatabaseSettingsFragment.kt | 6 ++-- .../keepass/viewmodels/DatabaseViewModel.kt | 6 ++-- app/src/main/res/values/strings.xml | 1 + 8 files changed, 57 insertions(+), 39 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 9ab1bf483..bc807e7a9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -8,8 +8,8 @@ GEM artifactory (3.0.15) atomos (0.1.3) aws-eventstream (1.2.0) - aws-partitions (1.626.0) - aws-sdk-core (3.140.0) + aws-partitions (1.646.0) + aws-sdk-core (3.160.0) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.525.0) aws-sigv4 (~> 1.1) @@ -21,7 +21,7 @@ GEM aws-sdk-core (~> 3, >= 3.127.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.4) - aws-sigv4 (1.5.1) + aws-sigv4 (1.5.2) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) claide (1.1.0) @@ -36,7 +36,7 @@ GEM unf (>= 0.0.5, < 1.0.0) dotenv (2.8.1) emoji_regex (3.2.3) - excon (0.92.4) + excon (0.93.0) faraday (1.10.2) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) @@ -66,7 +66,7 @@ GEM faraday_middleware (1.2.0) faraday (~> 1.0) fastimage (2.2.6) - fastlane (2.209.1) + fastlane (2.210.1) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -107,9 +107,9 @@ GEM xcpretty-travis-formatter (>= 0.0.3) fastlane-plugin-versioning_android (0.1.0) gh_inspector (1.1.3) - google-apis-androidpublisher_v3 (0.25.0) - google-apis-core (>= 0.7, < 2.a) - google-apis-core (0.7.0) + google-apis-androidpublisher_v3 (0.29.0) + google-apis-core (>= 0.9.0, < 2.a) + google-apis-core (0.9.0) addressable (~> 2.5, >= 2.5.1) googleauth (>= 0.16.2, < 2.a) httpclient (>= 2.8.1, < 3.a) @@ -118,23 +118,23 @@ GEM retriable (>= 2.0, < 4.a) rexml webrick - google-apis-iamcredentials_v1 (0.13.0) - google-apis-core (>= 0.7, < 2.a) - google-apis-playcustomapp_v1 (0.10.0) - google-apis-core (>= 0.7, < 2.a) - google-apis-storage_v1 (0.17.0) - google-apis-core (>= 0.7, < 2.a) + google-apis-iamcredentials_v1 (0.15.0) + google-apis-core (>= 0.9.0, < 2.a) + google-apis-playcustomapp_v1 (0.11.0) + google-apis-core (>= 0.9.0, < 2.a) + google-apis-storage_v1 (0.19.0) + google-apis-core (>= 0.9.0, < 2.a) google-cloud-core (1.6.0) google-cloud-env (~> 1.0) google-cloud-errors (~> 1.0) google-cloud-env (1.6.0) faraday (>= 0.17.3, < 3.0) - google-cloud-errors (1.2.0) - google-cloud-storage (1.39.0) + google-cloud-errors (1.3.0) + google-cloud-storage (1.43.0) addressable (~> 2.8) digest-crc (~> 0.4) google-apis-iamcredentials_v1 (~> 0.1) - google-apis-storage_v1 (~> 0.17.0) + google-apis-storage_v1 (~> 0.19.0) google-cloud-core (~> 1.6) googleauth (>= 0.16.2, < 2.a) mini_mime (~> 1.0) diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseLockActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseLockActivity.kt index 415f75807..0f3705ace 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseLockActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseLockActivity.kt @@ -90,8 +90,8 @@ abstract class DatabaseLockActivity : DatabaseModeActivity(), mDatabaseTaskProvider?.startDatabaseSave(save) } - mDatabaseViewModel.mergeDatabase.observe(this) { - mDatabaseTaskProvider?.startDatabaseMerge() + mDatabaseViewModel.mergeDatabase.observe(this) { save -> + mDatabaseTaskProvider?.startDatabaseMerge(save) } mDatabaseViewModel.reloadDatabase.observe(this) { fixDuplicateUuid -> @@ -227,6 +227,9 @@ abstract class DatabaseLockActivity : DatabaseModeActivity(), // Reload the current activity if (result.isSuccess) { reloadActivity() + if (actionTask == DatabaseTaskNotificationService.ACTION_DATABASE_MERGE_TASK) { + Toast.makeText(this, R.string.merge_success, Toast.LENGTH_LONG).show() + } } else { this.showActionErrorIfNeeded(result) finish() @@ -270,11 +273,11 @@ abstract class DatabaseLockActivity : DatabaseModeActivity(), } fun mergeDatabase() { - mDatabaseTaskProvider?.startDatabaseMerge() + mDatabaseTaskProvider?.startDatabaseMerge(mAutoSaveEnable) } fun mergeDatabaseFrom(uri: Uri, mainCredential: MainCredential) { - mDatabaseTaskProvider?.startDatabaseMerge(uri, mainCredential) + mDatabaseTaskProvider?.startDatabaseMerge(mAutoSaveEnable, uri, mainCredential) } fun reloadDatabase() { diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/DatabaseTaskProvider.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/DatabaseTaskProvider.kt index 3cf02802d..a99d73b22 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/DatabaseTaskProvider.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/DatabaseTaskProvider.kt @@ -412,9 +412,11 @@ class DatabaseTaskProvider { , ACTION_DATABASE_LOAD_TASK) } - fun startDatabaseMerge(fromDatabaseUri: Uri? = null, + fun startDatabaseMerge(save: Boolean, + fromDatabaseUri: Uri? = null, mainCredential: MainCredential? = null) { start(Bundle().apply { + putBoolean(DatabaseTaskNotificationService.SAVE_DATABASE_KEY, save) putParcelable(DatabaseTaskNotificationService.DATABASE_URI_KEY, fromDatabaseUri) putParcelable(DatabaseTaskNotificationService.MAIN_CREDENTIAL_KEY, mainCredential) } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/MergeDatabaseRunnable.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/MergeDatabaseRunnable.kt index b805793d0..2537b4edd 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/MergeDatabaseRunnable.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/MergeDatabaseRunnable.kt @@ -27,25 +27,28 @@ import com.kunzisoft.keepass.database.element.binary.BinaryData import com.kunzisoft.keepass.database.exception.DatabaseException import com.kunzisoft.keepass.hardware.HardwareKey import com.kunzisoft.keepass.settings.PreferencesUtil -import com.kunzisoft.keepass.tasks.ActionRunnable import com.kunzisoft.keepass.tasks.ProgressTaskUpdater -class MergeDatabaseRunnable(private val context: Context, - private val mDatabase: Database, - private val mDatabaseToMergeUri: Uri?, - private val mDatabaseToMergeMainCredential: MainCredential?, - private val mDatabaseToMergeChallengeResponseRetriever: (HardwareKey, ByteArray?) -> ByteArray, - private val progressTaskUpdater: ProgressTaskUpdater?, - private val mLoadDatabaseResult: ((Result) -> Unit)?) - : ActionRunnable() { +class MergeDatabaseRunnable( + context: Context, + private val mDatabaseToMergeUri: Uri?, + private val mDatabaseToMergeMainCredential: MainCredential?, + private val mDatabaseToMergeChallengeResponseRetriever: (HardwareKey, ByteArray?) -> ByteArray, + database: Database, + saveDatabase: Boolean, + challengeResponseRetriever: (HardwareKey, ByteArray?) -> ByteArray, + private val progressTaskUpdater: ProgressTaskUpdater?, + private val mLoadDatabaseResult: ((Result) -> Unit)?) + : SaveDatabaseRunnable(context, database, saveDatabase, null, challengeResponseRetriever) { override fun onStartRun() { - mDatabase.wasReloaded = true + database.wasReloaded = true + super.onStartRun() } override fun onActionRun() { try { - mDatabase.mergeData( + database.mergeData( context.contentResolver, mDatabaseToMergeUri, mDatabaseToMergeMainCredential, @@ -63,9 +66,11 @@ class MergeDatabaseRunnable(private val context: Context, // Register the current time to init the lock timer PreferencesUtil.saveCurrentTime(context) } + super.onActionRun() } override fun onFinishRun() { + super.onFinishRun() mLoadDatabaseResult?.invoke(result) } } diff --git a/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt b/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt index 2b6686f8a..673cb52a6 100644 --- a/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt +++ b/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt @@ -753,9 +753,14 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress return MergeDatabaseRunnable( this, - database, databaseToMergeUri, databaseToMergeMainCredential, + { hardwareKey, seed -> + // TODO fix first challenge response + retrieveResponseFromChallenge(hardwareKey, seed) + }, + database, + !database.isReadOnly && intent.getBooleanExtra(SAVE_DATABASE_KEY, false), { hardwareKey, seed -> retrieveResponseFromChallenge(hardwareKey, seed) }, diff --git a/app/src/main/java/com/kunzisoft/keepass/settings/NestedDatabaseSettingsFragment.kt b/app/src/main/java/com/kunzisoft/keepass/settings/NestedDatabaseSettingsFragment.kt index 3c2c7c0d8..1d0390ad7 100644 --- a/app/src/main/java/com/kunzisoft/keepass/settings/NestedDatabaseSettingsFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/settings/NestedDatabaseSettingsFragment.kt @@ -115,8 +115,8 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev mDatabaseViewModel.saveDatabase(save) } - private fun mergeDatabase() { - mDatabaseViewModel.mergeDatabase(false) + private fun mergeDatabase(save: Boolean) { + mDatabaseViewModel.mergeDatabase(save) } private fun reloadDatabase() { @@ -671,7 +671,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev true } R.id.menu_merge_database -> { - mergeDatabase() + mergeDatabase(!mDatabaseReadOnly) true } R.id.menu_reload_database -> { diff --git a/app/src/main/java/com/kunzisoft/keepass/viewmodels/DatabaseViewModel.kt b/app/src/main/java/com/kunzisoft/keepass/viewmodels/DatabaseViewModel.kt index 8608b144a..99a89642d 100644 --- a/app/src/main/java/com/kunzisoft/keepass/viewmodels/DatabaseViewModel.kt +++ b/app/src/main/java/com/kunzisoft/keepass/viewmodels/DatabaseViewModel.kt @@ -87,8 +87,8 @@ class DatabaseViewModel: ViewModel() { _saveDatabase.value = save } - fun mergeDatabase(fixDuplicateUuid: Boolean) { - _mergeDatabase.value = fixDuplicateUuid + fun mergeDatabase(save: Boolean) { + _mergeDatabase.value = save } fun reloadDatabase(fixDuplicateUuid: Boolean) { @@ -196,6 +196,8 @@ class DatabaseViewModel: ViewModel() { data class SuperLong(val oldValue: Long, val newValue: Long, val save: Boolean) + data class SuperMerge(val fixDuplicateUuid: Boolean, + val save: Boolean) data class SuperCompression(val oldValue: CompressionAlgorithm, val newValue: CompressionAlgorithm, val save: Boolean) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aab95a64c..c5f01429e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -373,6 +373,7 @@ Access to the file revoked by the file manager, close the database and reopen it from its location. You have not allowed the app to use an exact alarm. As a result, the features requiring a timer will not be done with an exact time. The hash of the file is not guaranteed because Android can change its data on the fly. Change the file extension to .bin for correct integrity. + Merge successfully completed Permission Version %1$s Build %1$s From a1e526616161645fff6cde1d9936cbdf3ef2f9c4 Mon Sep 17 00:00:00 2001 From: solokot Date: Tue, 3 Jan 2023 17:30:15 +0000 Subject: [PATCH 33/49] Translated using Weblate (Russian) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ru/ --- app/src/main/res/values-ru/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 4a49a8451..7e8833876 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -413,7 +413,7 @@ Быстрый поиск Открывать поисковый запрос при открытии базы Помнить расположение баз - Отслеживать расположение баз + Помнить расположение файлов баз Помнить расположение файлов ключей Помнить расположение файлов ключей баз Показывать последние базы From 94c6710f222b9ce3515ee8b038bc6bdd66342d8a Mon Sep 17 00:00:00 2001 From: Ahmad0a Date: Thu, 5 Jan 2023 01:17:01 +0000 Subject: [PATCH 34/49] Translated using Weblate (Arabic) Currently translated at 75.2% (475 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ar/ --- app/src/main/res/values-ar/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index fde125115..83eee26c9 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -105,7 +105,7 @@ نسخ حقل تأمين قاعدة البيانات أرسل انطباعاتك - التنفيذ لمُدير كلمات المرور «كي‌ باس» على نظام أندرويد + \"KeePassDX\" هو تطبيق أندرويد لمدير كلمات المرور كي باس \"KeePass\" أضف مدخل تحرير مدخل وظيفة اشتقاق المفتاح From 83ab5223a8e375c02b789a5892664fc5f6b7ff22 Mon Sep 17 00:00:00 2001 From: bowornsin Date: Sat, 7 Jan 2023 05:40:35 +0000 Subject: [PATCH 35/49] Translated using Weblate (Thai) Currently translated at 8.2% (52 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/th/ --- app/src/main/res/values-th/strings.xml | 43 ++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index c98c0a2f8..f7967544f 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -4,7 +4,7 @@ การเข้ารหัส ร่วมแก้ไข ข้อเสนอแนะ - แอปพลิเคชั่นการจัดการรหัสผ่าน KeePass บน Android + แอปพลิเคชั่นจัดการรหัสผ่านแบบ KeePass บน Android ยอมรับ เพื่มกลุ่ม รหัสผ่านหลัก @@ -44,7 +44,46 @@ สร้างไฟล์ฐานข้อมูลรหัสผ่านแรกของคุณ ป้อนรหัสผ่าน และ/หรือ Keyfile เพื่อปลดล็อกฐานข้อมูลของคุณ \n -\n \nสำรองไฟล์ฐานข้อมูลของคุณในที่ปลอดภัยหลังจากการเปลี่ยนแปลงแต่ละครั้ง ปลดล็อกฐานข้อมูล + ช่องทำเครื่องหมาย Keyfile + ปุ่มสลับการมองเห็นรหัสผ่าน + จำนวนคำวลีรหัสผ่าน + เพิ่มโหนด + สีพื้นหลังของรายการ + เพิ่มรายการ + แก้ไขรายการ + อนุพันธ์ของฟังก์ชันหลัก + หมดเวลา + Extended ASCII + ในบางอุปกรณ์ ระบบไม่อนุญาตให้แอปใช้คลิปบอร์ด + ไม่สามารถล้างคลิปบอร์ด + ระยะเวลาของคลิปบอร์ด + ระยะเวลาของข้อมูลในคลิปบอร์ด (หากอุปกรณ์รองรับ) + พื้นหลัง + เปิดไฟล์ + เพิ่มรายการ + เพิ่มกลุ่ม + เพื่มรายการ + ข้อมูลไฟล์ + ข้อมูลประจำตัว + ข้อมูลรหัสผ่านแบบใช้ครั้งเดียว + ช่องทำเครื่องหมายรหัสผ่าน + ช่องทำเครื่องหมายคีย์ฮาร์ดแวร์ + ไอคอนรายการ + สีของฐานข้อมูล + สีพื้นหน้ารายการ + ส่วนหัวของการนำทาง + ลิ้นชักการนำทางเปิดอยู่ + ปิดลิ้นชักการนำทาง + ตรวจสอบ + ละทิ้งการเปลี่ยนแปลง\? + ละทิ้ง + ตัวสร้างรหัสผ่าน + เพิ่มช่อง + เพิ่มไฟล์แนบ + ลบฟิลด์ + อัปเดต + ลบ + ปิดฟิลด์ \ No newline at end of file From bc0e3641640b9218c2b8357712ce165e74aceeeb Mon Sep 17 00:00:00 2001 From: ERYpTION Date: Tue, 10 Jan 2023 19:31:35 +0000 Subject: [PATCH 36/49] Translated using Weblate (Danish) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/da/ --- app/src/main/res/values-da/strings.xml | 408 +++++++++++++++---------- 1 file changed, 255 insertions(+), 153 deletions(-) diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index a72c47cab..902c0b904 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -19,25 +19,25 @@ Danish translation by Frederik Svarre (fsvarre@gmail.com) --> Hjemmeside - Android implementering af KeePass password manager + Android-implementering af KeePass-adgangskodeadministrator Accepter Tilføj post Tilføj gruppe Krypteringsalgoritme - Tid udløbet - Inaktiv tid, før databasen låses - Program - Indstillinger + Tidsudløb + Inaktiv tid før databasen låses + App + App-indstillinger Parenteser En filhåndtering, der accepterer intensionshandlingen ACTION_CREATE_DOCUMENT og ACTION_OPEN_DOCUMENT, er nødvendig for at oprette, åbne og gemme databasefiler. Udklipsholder ryddet - Udklipsfejl - Nogle enheder, vil ikke lade programmer bruge udklipsholderen. + Udklipsholderfejl + Nogle enheder vil ikke lade apps bruge udklipsholderen. Kunne ikke rydde udklipsholderen - Udklipsholder timeout - Varighed af opbevaring i udklipsholder (hvis det understøttes) + Udklipsholder tidsudløb + Varighed af opbevaring i udklipsholderen (hvis det understøttes) Vælg for at kopiere %1$s til udklipsholder - Opretter databasenøgle… + Henter databasenøgle… Database Dekrypterer databaseindhold… Brug som standarddatabase @@ -57,16 +57,16 @@ URL Brugernavn Arcfour stream cipher er ikke understøttet. - Kunne ikke håndtere URI i KeePassDX. + Kunne ikke håndtere denne URI i KeePassDX. Kunne ikke oprette fil Kunne ikke læse databasen. Sørg for, at stien er korrekt. Indtast et navn. Vælg en nøglefil. Ikke nok hukommelse til at indlæse hele databasen. - Der skal vælges mindst én kode for kodeordsgenerering. + Der skal vælges mindst én type af adgangskodegenerering. Adgangskoderne er ikke ens. - \"Transformation Runder\" er for stor. Sættes til 2147483648. + \"Transformationsrunder\" er sat for højt. Sættes til 2147483648. Hver streng skal have et feltnavn. Angiv et positivt heltal i feltet \"Længde\". Feltnavn @@ -86,15 +86,15 @@ Nøglefilen er tom. Længde Størrelse på listeelementer - Tekststørrelse i elementliste + Tekststørrelse i elementlisten Indlæser database… Små bogstaver Skjul adgangskoder - Masker adgangskoder (***) som standard + Skjul adgangskoder (***) som standard Om Skift hovednøgle Indstillinger - Database indstillinger + Databaseindstillinger Slet Donér Rediger @@ -107,27 +107,27 @@ Bindestreg Aldrig Ingen søgeresultater - Installer en web-browser til at åbne URL. + Installer en web-browser for at åbne denne URL. Opretter ny database… Arbejder… Beskyttelse - KeePassDX behøver skrivetilladelse for at ændre i databasen. + Afhængigt af din filhåndtering er det muligt, at KeePassDX ikke har tilladelse til at skrive i dit lager. Fjern Rod Transformationsrunder - Yderligere krypteringsrunder giver højere beskyttelse mod brute-force angreb, men kan virkelig forsinke læsnings- og skrivehastigheden. + Yderligere krypteringsrunder giver højere beskyttelse mod brute-force angreb, men kan forsinke læsnings- og skrivehastigheden markant. Gemmer database… Mellemrum Naturlig rækkefølge Speciel Søg Understregning - Database-versionen er ikke understøttet. + Database-version ikke understøttet. Store bogstaver Version %1$s Angiv en adgangskode og/eller en nøglefil til at låse databasen op. \n -\nHusk at gemme en kopi af .kdbx filen i et sikkert sted efter hver ændring. +\nHusk at gemme en kopi af din databasefil et sikkert sted efter hver ændring. Lille Mellem @@ -140,10 +140,10 @@ Tillad Databasen kunne ikke indlæses. Kunne ikke indlæse nøglen. Prøv at reducere KDF \"hukommelsesforbrug\". - Kunne ikke aktivere autofyld tjenesten. + Kunne ikke aktivere autofyld-tjenesten. Kunne ikke finde filen. Prøv at åbne den fra filhåndtering. Vis brugernavne - Vis brugernavne i postlister + Viser brugernavne i postlister Kopi af %1$s Formularudfyldning Kopier @@ -151,12 +151,12 @@ Indsæt Annuller Skrivebeskyttet - Modificerbar + Kan ændres Skrivebeskyttet - Databasekrypteringsalgoritme anvendt for alle data. + Databasekrypteringsalgoritme anvendt for alle data For at generere nøglen til krypteringsalgoritmen, omdannes hovednøglen ved hjælp af en tilfældigt saltet nøgleafledningsfunktion. Hukommelsesforbrug - Hukommelse, som anvendes af nøgleafledningsfunktion. + Hukommelse, som anvendes af nøgleafledningsfunktionen. Parallelitet Grad af parallelitet (dvs. antallet af tråde), som anvendes af nøgleafledningsfunktion. Sorter @@ -170,34 +170,34 @@ Adgang Advarsel Undgå adgangskodetegn uden for tekstkodningsformatet i databasefilen (ukendte tegn konverteres til samme bogstav). - Bekræft brug af ingen adgangskode til beskyttelse mod oplåsning\? + Fortsæt uden adgangskode til beskyttelse mod oplåsning\? Fortsæt uden krypteringsnøgle\? Krypteret adgangskode er gemt - Databasen har endnu ikke en adgangskode. + Denne database har endnu ikke gemt legitimationsoplysninger. Historik Udseende Generelt Autoudfyld KeePassDX formularudfyldning Log ind med KeePassDX - Indstil standard autoudfyldservice - Aktiver autofyldning for hurtigt at udfylde formularer i andre programmer - Genereret kodeordslængde + Indstil standard autoudfyldningstjeneste + Aktiver autofyldning for hurtigt at udfylde formularer i andre apps + Genereret adgangskodelængde Angiver standardlængden for genererede adgangskoder Adgangskodetegn Angiv tilladte tegn for adgangskodegenerator Udklipsholder - Udklipsholdermeddelelser - Vis udklipsholder for at kopiere felter når en post vises - Hvis automatisk sletning af udklipsholder mislykkes, slet historikken manuelt. + Udklipsholder-notifikationer + Vis udklipsholder-notifikationer for at kopiere felter, når en post vises + Hvis den automatiske sletning af udklipsholderen ikke lykkes, skal du slette dens historik manuelt. Lås Skærmlås - Lås databasen, når skærmen er slukket - Fingeraftryk + Lås databasen få sekunder efter at skærmen slukkes + Avanceret oplåsning Biometrisk oplåsning - Giver mulighed for at scanne biometriske for at åbne databasen + Giver mulighed for at scanne dine biometriske data for at åbne databasen Slet krypteringsnøgler - Slet alle krypteringsnøgler, der er relateret til biometrisk genkendelse + Slet alle krypteringsnøgler, der er relateret til avanceret oplåsningsgenkendelse Funktionen kunne ikke startes. Enheden kører Android %1$s, men har brug for %2$s eller nyere. Kunne ikke finde den tilsvarende hardware. @@ -206,34 +206,34 @@ Tildel en hovednøgle Opret en ny database Brug af papirkurven - Flyt grupper og poster til gruppen \"Papirkurven\" før den slettes + Flyt grupper og poster til \"Papirkurv\" før sletning Feltskrifttype Skift skrifttypen, der anvendes i felter, for at forbedre tegnsynlighed Udklipsholder tillid - Tillad kopiering af adgangskoden og beskyttede felter kopieres til udklipsholderen - Advarsel: Udklipsholder deles af alle programmer. Hvis følsomme data er kopieret, kan andet software gendanne den. + Tillad kopiering af postens adgangskode og beskyttede felter til udklipsholderen + Advarsel: Udklipsholderen deles af alle apps. Hvis følsomme data er kopieret, kan andet software gendanne den. Databasenavn - Database beskrivelse + Database-beskrivelse Databaseversion Tekst Brugerflade Øvrige Tastatur - Magi keyboard + Magikeyboard Aktiver et brugerdefineret tastatur, der udfylder adgangskoder og alle identitetsfelter Tillad ingen hovednøgle Tillader at trykke på knappen \"Åbn\", hvis der ikke er valgt nogen legitimationsoplysninger Skrivebeskyttet - Åbn database skrivebeskyttet som standard - Pædagogiske tips - Fremhæv elementer for at lære, hvordan programmet fungerer - Nulstil pædagogiske tip - Vis al uddannelsesinformation igen - Nulstilling af pædagogiske tips - Opret databasefilen - Opret den første adgangskodeadministrationsfil. + Åbn som standard databasen skrivebeskyttet + Praktiske tips + Fremhæv elementer for at lære, hvordan appen fungerer + Nulstil praktiske tips + Vis al vejledning igen + Nulstilling af praktiske tips + Opret din databasefil + Opret din første adgangskodeadministrationsfil. Åbn en eksisterende database - Åbn den tidligere database fil fra filhåndtering for at fortsætte med at bruge den. + Åbn den tidligere databasefil fra din filhåndtering for at fortsætte med at bruge den. Tilføj elementer til databasen Poster hjælper med at administrere digitale identiteter. \n @@ -241,56 +241,56 @@ Søg i poster Indtast titel, brugernavn eller indhold af andre felter for at hente adgangskoder. Rediger posten - Rediger post med brugerdefinerede felter. Pool data kan refereres mellem forskellige indtastningsfelter. + Rediger post med brugerdefinerede felter. Pool-data kan refereres mellem forskellige indtastningsfelter. Opret en stærk adgangskode - Generer en stærk kodeord til at forbinde elementet, definer det i henhold til kriteriet for formularen og glem ikke et sikkert kodeord. + Generer en stærk adgangskode til din post, og definer den nemt i henhold til kriterierne i formularen, og glem ikke en sikker adgangskode. Tilføj brugerdefinerede felter Registrer et ekstra felt, tilføj en værdi og beskyt det eventuelt. Lås databasen op Skrivebeskyt databasen Skift åbningstilstanden for sessionen. \n  -\nI \"skrivebeskyttet\" tilstand forhindres utilsigtede ændringer i databasen. -\nI \"skrivetilstand\" kan man tilføje, slette eller redigere alle elementerne, som det ønskes. +\nI \"Skrivebeskyttet\" tilstand forhindres utilsigtede ændringer i databasen. +\nI \"Kan ændres\" kan du tilføje, slette eller redigere alle elementerne, som det ønskes. Kopier et felt - Kopier nemt et felt og indsæt det hvor det ønskes + Kopierede felter kan indsættes hvor som helst. \n -\nBrug flere formular udfyldninsmetoder. Brug den der foretrækkes. +\nBrug den metode til udfyldelse af formularer, du foretrækker. Lås databasen Lås hurtigt databasen, indstil til at låse efter et stykke tid, og når skærmen slukkes. - Sorter elementer + Sortering af elementer Vælg hvordan poster og grupper er sorteret. Deltag - Bidrag til at øge stabiliteten, sikkerheden og med at tilføje flere funktioner. - I modsætning til andre programmer til adgangskodeadministration er denne <strong>annoncefri</strong>, <strong>copyleft fri software</strong>, og indsamler ikke personlige data, uanset hvilken version der bruges. - Ved at købe pro-versionen, er der adgang til <strong>visuel stil</strong>, og det vil især hjælpe <strong>gennemførelsen af lokale projekter.</strong> - Denne <strong>visuelle stil</strong> er tilgængelige takket være bidrag. - For at bevare uafhængighed og altid at være aktiv, håber vi på dit <strong>bidrag.</strong> + Hjælp med at øge stabiliteten og sikkerheden og med at tilføje flere funktioner. + I modsætning til andre apps til adgangskodeadministration er denne reklamefri, copyleft fri software, og indsamler ikke personlige data, uanset hvilken version der bruges. + Ved at købe pro-versionen får du adgang til visuel stil, og du vil især hjælpe med gennemførelsen af fællesskabets projekter. + Denne visuelle stil er tilgængelig takket være din generøsitet. + For at vi kan bevare vores frihed og altid være aktive, er vi afhængige af dit bidrag. Funktionen er <strong>under udvikling</strong>, og det kræver <strong>bidrag</strong>, for snart at være tilgængelig. Ved at købe <strong>pro</strong> versionen, Ved at <strong>bidrage</strong>, - tilskyndes udviklerne til at lave <strong>nye funktioner</strong> og <strong>rette fejl</strong> i henhold bemærkninger. - Tak for bidrag. + tilskyndes udviklerne til at lave nye funktioner og rette fejl i henhold dine bemærkninger. + Mange tak for dit bidrag. Vi arbejder hårdt på hurtigt at frigive denne funktion. Husk at holde din app opdateret ved at installere den nyeste version. Hent Bidrag - Tema - Tema, der bruges i programmet + App-tema + Tema, der bruges i appen Ikonpakke - Ikonpakke, der anvendes - Magi keyboard - Magi keyboard (KeePassDX) + Ikonpakke, der anvendes i appen + Magikeyboard + Magikeyboard (KeePassDX) Magikeyboard indstillinger Post Udløbstid - Meddelelsesinfo - Vis en meddelelse, når en post er til rådighed + Notifikationsinfo + Vis en notifikation, når en post er til rådighed Post %1$s til rådighed på Magikeyboard %1$s Ryd ved lukning - Luk databasen, når meddelse lukkes + Luk databasen, når notifikation lukkes Udseende Tastaturtema Taster @@ -300,49 +300,49 @@ Tidsudløb for at rydde indtastning Noter Valgstilstand - Luk ikke programmet… + Luk ikke appen… Tryk på \'Tilbage\' for at låse Lås databasen, når der klikkes på tilbage-knappen fra startskærmen Ryd ved lukning - Lås databasen, når udklipsholderens varighed udløber, eller meddelelsen lukkes, når du begynder at bruge den + Lås databasen, når udklipsholderens varighed udløber, eller notifikationen lukkes, efter at du begynder at bruge den Papirkurven Valg af indtastning - Vis indtastningsfelter i Magikeyboard, når der vises en post + Når du ser en post i KeePassDX, skal Magikeyboard udfyldes med den pågældende post Slet adgangskode - Sletter adgangskoden der er angivet efter et forsøg på at oprette forbindelse til en database + Sletter den adgangskode, der er indtastet efter et forsøg på at oprette forbindelse til en database Åbn fil - Undernode - Tilføj knude + Undernoder + Tilføj node Tilføj post Tilføj gruppe Filoplysninger Afkrydsningsfelt for adgangskode Afkrydsningsfelt for nøglefil Gentag for at skifte synlighed for adgangskode - Indtastningsikon + Ikon for post Adgangskodegenerator Længde på adgangskode Tilføj felt Fjern felt UUID Vis antal poster - Vise antallet af poster i en gruppe - Post kan ikke flyttes her til. - Post kan ikke kopieres her til. + Viser antallet af poster i en gruppe + Du kan ikke flytte en post hertil. + Post kan ikke kopieres hertil. Baggrund Opdater Luk felter Kan ikke oprette database med denne adgangskode og nøglefil. Avanceret oplåsning Biometrisk - Åbn automatisk biometrisk prompt - Spørg automatisk efter biometrisk oplåsning, hvis databasen er konfigureret til at bruge det - Aktiver + Prompt til automatisk åbning + Spørg automatisk efter avanceret oplåsning, hvis databasen er konfigureret til at bruge det + Aktivér Deaktiver Hovednøgle Sikkerhed Historik - Indstilling af engangsadgangskode (OTP) + Indstil engangsadgangskode (OTP) OTP-type Hemmelig Periode (sekunder) @@ -351,26 +351,26 @@ Algoritme OTP Ugyldig OTP-hemmelighed. - Der skal angives mindst en legitimationsoplysning. + Der skal angives mindst én legitimationsoplysning. En gruppe kan ikke kopieres her. Den hemmelige nøgle skal være i Base32-format. Tæller skal være mellem %1$d og %2$d. - Perioden skal være mellem %1$d og %2$d sekunder. + Perioden skal være på mellem %1$d og %2$d sekunder. Token skal indeholder %1$d til %2$d cifre. %1$s med det samme UUID %2$s findes allerede. Opretter database… Sikkerhedsindstillinger Indstillinger for hovednøgle - Databasen indeholder dublerede UUID\'er. + Databasen indeholder UUID-dubletter. Løs problemet ved at generere nye UUID\'er for dubletter og fortsætte\? Database åbnet Kopier indtastningsfelter ved hjælp af enhedens udklipsholder Brug avanceret oplåsning for at gøre det lettere at åbne en database Datakomprimering Datakomprimering reducerer databasens størrelse - Max. antal - Begræns antallet af historikposter pr. indtastning - Max. størrelse + Maksimalt antal + Begræns antallet af historikelementer pr. post + Maksimal størrelse Begræns historikstørrelsen pr. post Anbefalet fornyelse Anbefal ændring af hovednøglen (dage) @@ -385,14 +385,14 @@ Gzip Indstillinger for enhedens tastatur Databasen kunne ikke gemmes. - Gem database + Gem data Tøm papirkurven Udfører kommandoen… Slet markerede noder permanent\? Nøglelageret er ikke korrekt initialiseret. Papirkurvsgruppe Gem automatisk database - Gem databasen efter hver en vigtig handling (i tilstanden \"Modificerbar\") + Gem databasen efter hver en vigtig handling (i tilstanden \"Kan ændres\") Vedhæftninger Gendan historik Slet historik @@ -401,96 +401,96 @@ Hent %1$s Initialiserer… I gang: %1$d%% - Færdiggørelse… - Komplet! + Færdiggører… + Færdig! Skjul udløbne poster Udløbne poster vises ikke Kontakt Bidrag Tilbagemelding - KeePassDX ©%1$d Kunzisoft er <strong>open source</strong> og <strong>uden reklamer</strong>. -\nDet leveres som det er under <strong>GPLv3</strong> licens uden nogen garanti. - For at <strong>holde vores frihed</strong>, <strong>rette fejl</strong>, <strong>tilføje funktioner</strong> og <strong>at være altid aktiv</strong>, regner vi med <strong>bidrag</strong>. + KeePassDX ©%1$d Kunzisoft er open source og uden reklamer. +\nDen leveres som den er, under GPLv3 licens, uden nogen form for garanti. + For at vi kan bevare vores frihed, rette fejl, tilføje funktioner og altid være aktive, er vi afhængige af bidrag. Hurtig søgning - Anmod om en søgning når en database åbnes + Anmod om søgning ved åbning af en database Husk placeringer af databaser Holder styr på, hvor databaserne gemmes Husk placering af nøglefiler Holder styr på, hvor nøglefiler gemmes Vis seneste filer Vis placeringer af de seneste databaser - Skjule brudte databaselinks + Skjul brudte databaselinks Skjul brudte links på listen over seneste databaser Giv fil skriveadgang for at gemme databasændringer - Sæt op engangs-adgangskode-styring (HOTP / TOTP) for at generere et token anmodet af tofaktor-autentisering (2FA). + Indstil engangs-adgangskode-styring (HOTP / TOTP) for at generere et token anmodet om til tofaktor-autentisering (2FA). Opsætning af OTP Databasefilen kunne ikke oprettes. - Tilføj vedhæng + Tilføj vedhæftning Kassér - Kasser ændringer\? + Kassér ændringer\? Valider Viser låseknappen i brugergrænsefladen Vis låseknap Indstillinger for automatisk udfyldning - Adgang til filen tilbagekaldt af filadministratoren + Adgang til filen tilbagekaldt af filhåndteringen Etiketten findes allerede. - Genstart programmet, der indeholder formularen for at aktivere blokeringen. + Genstart appen, der indeholder formularen for at aktivere blokeringen. Bloker autofyld Blokeringsliste, der forhindrer automatisk udfyldning af webdomæner - Blokeringsliste for webdomæne - Blokeringsliste der forhindrer automatisk udfyldning af programmer - Blokeringsliste for program + Blokeringsliste for webdomæner + Blokeringsliste der forhindrer automatisk udfyldning af apps + Blokeringsliste for applikation Skift automatisk tilbage til det forrige tastatur efter udførelse af \"Automatisk tastehandling\" Automatisk tastehandling Skift automatisk tilbage til det forrige tastatur på databasens legitimationsskærm - Skærmbilledet til databaselegitimationsoplysninger - Skifte tastatur + Skærm til databaselegitimationsoplysninger + Skift tastatur Filter Søg på webdomæner med begrænsninger på underdomæner - Underdomæne søgning + Underdomæne-søgning Teksten stemmer ikke overens med det ønskede element. Tilføj element - Viser UUID\'en, der er knyttet til en post + Viser UUID\'en, der er knyttet til en post eller en gruppe Vis UUID Overfør %1$s Vedhæft fil - Lagring af data er ikke tilladt for en database, der er åbnet som skrivebeskyttet. - Bed om at gemme data, når en formular er valideret - Bed om at gemme data + Det er ikke tilladt at gemme data i en database, der er åbnet som skrivebeskyttet. + Spørg om du vil gemme data, når en formular er udfyldt + Spørg om du vil gemme data Gem søgeoplysninger Luk databasen efter en markering af autofyld Luk database Skift automatisk tilbage til det forrige tastatur efter låsning af databasen Lås databasen Gem delte oplysninger - Anmeldelse - Fjerner vedhæftede filer indeholdt i databasen, men ikke knyttet til en post + Notifikation + Fjerner vedhæftede filer, der findes i databasen, men som ikke er knyttet til en post Fjern ikke-sammenkædede data Data Biometrisk sikkerhedsopdatering påkrævet. - Indholdet af nøglefilen bør aldrig ændres og bør i bedste fald indeholde tilfældigt genererede data. + Indholdet af nøglefilen bør aldrig ændres, og optimalt set bør den indeholde tilfældigt genererede data. Det anbefales ikke at tilføje en tom nøglefil. Fjern alligevel disse data\? Fjernelse af ikke-linkede data kan mindske størrelsen på databasen, men kan også slette data, der bruges til KeePass-plugins. Tilføj alligevel filen\? - Overførelsen af filen erstatter den eksisterende. - En KeePass database formodes kun at indeholde små hjælpefiler (såsom PGP nøglefiler). + Overførsel af denne fil vil erstatte den eksisterende fil. + En KeePass-database bør kun indeholde små hjælpefiler (såsom PGP-nøglefiler). \n \nDatabasen kan blive meget stor og reducere ydeevnen med denne overførelse. Slet alle noder permanent fra papirkurven\? Registreringstilstand - Gem tilstand + Gem-tilstand Søgetilstand Det er ikke tilladt at gemme et nyt element i en skrivebeskyttet database - Oplysninger om legitimationsoplysninger + Legitimationsoplysninger Der er ikke tilmeldt biometriske legitimationsoplysninger eller enhedsoplysninger. Overfør en vedhæftet fil til posten for at gemme vigtige eksterne data. - Forsøger at gemme delte oplysninger, når der foretages et manuelt indtastningsvalg - Forsøger at gemme delte oplysninger, når der foretages et manuelt indtastningsvalg + Forsøger at gemme delte oplysninger, når der foretages et manuelt indtastningsvalg, så det bliver lettere at bruge dem senere + Forsøg at gemme delte oplysninger, når der foretages et manuelt indtastningsvalg, så det bliver lettere at bruge dem senere Feltnavnet findes allerede. Brugerdefineret Standard - Vælg lys eller mørk tema + Vælg lyst eller mørkt tema Temalysstyrke GiB MiB @@ -503,68 +503,170 @@ Tilbage til forrige tastatur Brugerdefinerede felter Slet alle krypteringsnøgler relateret til avanceret oplåsningsgenkendelse\? - Tryk for at slette avancerede oplåsningstaster + Tryk for at slette avancerede oplåsningsnøgler Indhold Indtast adgangskoden, og klik derefter på denne knap. Kunne ikke initialisere avanceret oplåsningsprompt. Fejl ved avanceret oplåsning: %1$s - Kunne ikke genkende avanceret oplåsning - Den avancerede oplåsningsnøgle kan ikke læses. Slet den, og gentag proceduren for genkendelse af oplåsning. + Kunne ikke genkende aftryk til avanceret oplåsning + Den avancerede oplåsningsnøgle kan ikke læses. Slet den og gentag proceduren for genkendelse af oplåsning. Åbn database med avanceret oplåsningsgenkendelse Avanceret oplåsningsgenkendelse - Overskriv de eksterne ændringer ved at gemme databasen eller genindlæse den med de seneste ændringer. + Flet data, overskriv de eksterne ændringer ved at gemme databasen eller genindlæs den med de seneste ændringer. Oplysningerne i databasefilen er blevet ændret uden for appen. Slet avanceret oplåsningsnøgle - Genindlæs database + Genindlæs data Fildataene findes allerede. Der opstod en fejl under overførsel af fildataene. Filen, du prøver at overføre, er for stor. Listen kan ikke genopbygges korrekt. Database-URI kan ikke hentes. Oplysninger om engangsadgangskode - Uddrag databasens legitimationsoplysninger med biometriske data - Advarsel: hovedadgangskoden skal stadig huskes, hvis der bruges biometrisk genkendelse. - Åbn biometriske forespørgsel for at låse databasen op + Udtræk database legitimationsoplysninger med avancerede oplåsningdata + Du skal stadig huske din primære legitimationsoplysning, hvis du bruger avanceret oplåsningsgenkendelse. + Åbn den avancerede låseprompt for at låse databasen op Adgang til filen tilbagekaldt af filhåndteringsprogrammet, luk databasen og genåbn den fra dens placering. Der opstod en fejl under udførelsen af en handling på databasen. - Der opstod en fejl med at fjerne fildata. - Den existerende OTP type kunne ikke genkendes, den kan være tiden er udløbet for at lave dette token. - Sammenkæd din adgangskode, med din scannede biometriske oplysninger eller enheds legitimationsoplysninger for hurtigt oplåsning af din database. + Der opstod en fejl under fjernelsen af fildata. + Den existerende OTP-type kunne ikke genkendes. Det kan være, at dens validering ikke længere genererer token korrekt. + Sammenkæd din adgangskode med din scannede biometriske data eller enhedens legitimationsoplysninger for hurtigt at låse din database op. Enter Varigheden af avanceret oplåsning, før indholdet slettes - Giver dig mulighed for at bruge dine enhedsoplysninger for at åbne databasen + Giver dig mulighed for at bruge dine enhedsoplysninger til at åbne databasen Oplåsning via enhedsoplysninger - Forsøg på at vise forslag til automatisk udfyldning direkte fra et kompatibelt tastatur + Forsøg at vise forslag til automatisk udfyldning direkte fra et kompatibelt tastatur Indbyggede forslag Tilbagetast - Avanceret oplåsningstimeout - Avanceret oplåsning udløbsdato + Tidsudløb for avanceret oplåsning + Udløb af avanceret oplåsning Gem ikke krypteret indhold for at bruge avanceret oplåsning - Midlertidig biometrisk oplåsning - Enhedsoplysninger + Midlertidig avanceret oplåsning + Enhedens legitimation Egenskaber - Åbn den biometrisk genkendelse for at gemme legitimationsoplysninger + Åbn den avancerede låseprompt for at gemme legitimationsoplysninger Fejl under eksport af app-egenskaber App-egenskaber eksporteret Fejl under importering af app-egenskaber App-egenskaber importeret KeePassDX-egenskaber til at administrere app-indstillinger - Opret en fil til at eksportere app-egenskaber + Opret en fil for at eksportere app-egenskaber Eksporter app-egenskaber Vælg en fil for at importere app-egenskaber - Importer appegenskaber - Du kan flytte en gruppe her. - Dette ord er reseveret og kan ikke bruges. + Importer app-egenskaber + Du kan ikke flytte en gruppe hertil. + Dette ord er reserveret og kan ikke bruges. Udløbet Tags - Database farve + Databasefarve Skabeloner Søgbar - Arve + Nedarv Brugerdefinerede data - Søg filtre + Søgefiltre Nuværende gruppe Nummer Navn Type + Antal ord i adgangssætning + Der skelnes mellem store og små bogstaver + Almindeligt udtryk + Adgangssætning + Farvelæg adgangskoder + Farvelæg adgangskodetegn efter type + Adskillelsestegn + Ignorer tegn + små bogstaver + STORE BOGSTAVER + Overskriftstørrelse + Debit-/kreditkort + ID-kort + Kryptovaluta-wallet + CVV + Konto + Bank + Seed + Medlemskab + Flet data + Eksternt ikon + Genindlæsning af databasen vil slette de lokalt ændrede data. + Du har ikke givet appen tilladelse til at bruge en nøjagtig alarm. Som følge heraf vil de funktioner, der kræver en timer, ikke blive udført med et nøjagtigt tidspunkt. + Tilladelse + Skabelongruppe + Manuelt valg + Hold skærmen tændt, når du ser på posten + Hold skærmen tændt + Søgeskærm + Skift automatisk tilbage til det tidligere tastatur på søgeskærmen + Entropi: Høj + Entropi: Beregn… + Mindst et tegn fra hver + Forgrundsfarve for post + Baggrundsfarve for post + Holder + Vælg en hardwarenøgle. + XML forkert udformet. + Kan ikke flette fra en database V1. + Svar allerede givet. + Annulleret af bruger. + Driver til %1$s er påkrævet. + Databaseplacering er ukendt, databasehandling kan ikke udføres. + Hardwarenøgle er ikke understøttet. + Nøglen må ikke være tom. + Der er allerede anmodet om udfordring + Kan ikke få svaret fra udfordringen. + Vis OTP-token + Husk hardwarenøgler + Holder styr på de anvendte hardwarenøgler + En database er allerede åben, luk den først for at åbne den nye + Filens hash er ikke garanteret, fordi Android kan ændre dataene undervejs. Ændr filendelsen til .bin for at sikre korrekt integritet. + Vælg post… + Brug af skabeloner + Vis mulighed for at lade brugeren vælge databasepost + Skærmbillede-tilstand + Tillad tredjepartsapps at optage eller tage skærmbilleder af appen + Udelad tvetydige tegn + Antal tegn: %1$d + Skærmbillede-tilstand + Version + Udstedelsessted + E-mailadresse + Wi-fi + E-mail + SSID + Udstedelsesdato + Token + Afkrydsningsfelt for hardwarenøgle + PIN + Standard + IBAN + Skabelon + Beskadiget fil. + Ikonnavn + Viser OTP-tokens på listen over poster + Viser forgrund- og baggrundsfarver for en post + Brug dynamiske skabeloner til at udfylde felterne i en post + Denne funktion gemmer krypterede legitimationsdata i den sikre KeyStore på din enhed. +\n +\nAfhængigt af operativsystemets indbyggede API-implementering er den muligvis ikke fuldt funktionel. +\nKontroller KeyStore\'s kompatibilitet og sikkerhed med producenten af din enhed og skaberen af den ROM, du bruger. + Entropi: %1$s bit + Overvej tegn + Der hentes ingen brugerdata, denne applikation opretter ikke forbindelse til nogen server, kører kun lokalt og respekterer fuldt ud brugernes privatliv. + Navigationsskuffe åben + Navigationsoverskrift + Navigationsskuffe lukke + Auto-indtastning + Auto-indtastning-sekvens + Gem en kopi til … + Flet fra … + Skabeloner + Venter på udfordringsanmodningen… + Venter på svar på udfordringen… + Hardware-nøgle + Offentlig nøgle + Privat nøgle + Banknavn + SWIFT/BIC + Sikker note + Postfarver \ No newline at end of file From 10b5c9c26113722585ac3261a91ad25b936cb9e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kornelijus=20Tvarijanavi=C4=8Dius?= Date: Mon, 9 Jan 2023 17:51:08 +0000 Subject: [PATCH 37/49] Translated using Weblate (Lithuanian) Currently translated at 40.5% (256 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/lt/ --- app/src/main/res/values-lt/strings.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 72d5e692b..017c7855d 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -271,4 +271,9 @@ Pakartotinai perjungti slaptažodžio matomumą Slaptafrazės žodžių skaičius Ši etiketė jau egzistuoja. + Atsakymas jau pateiktas. + Nepavyko gauti atsakymo į iššūkį. + Atšaukė naudotojas. + Įvyko klaida šalinant failo duomenis. + Įvyko klaida atliekant veiksmą duomenų bazėje. \ No newline at end of file From 6416aad82359a3c2f91769bef11ff99bdd9bcfa1 Mon Sep 17 00:00:00 2001 From: Linerly Date: Wed, 11 Jan 2023 10:15:32 +0000 Subject: [PATCH 38/49] Translated using Weblate (Indonesian) Currently translated at 100.0% (631 of 631 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/id/ --- app/src/main/res/values-id/strings.xml | 64 +++++++++++++------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index e55e1daa2..58040e025 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -35,8 +35,8 @@ Secara otomatis tutupi kata sandi (***) Sembunyikan Kata Sandi Huruf Kecil - Memuat basisdata… - Pembuatan basisdata… + Memuat basis data… + Pembuatan basis data… Ukuran teks dalam daftar elemen Ukuran daftar item Menampilkan jumlah entri dalam sebuah grup @@ -45,7 +45,7 @@ Tampilkan nama pengguna Panjangnya File Kunci kosong. - Tidak bisa mengenali format basisdata. + Tidak bisa mengenali format basis data. %1$s dengan UUID yang sama %2$s sudah ada. Algoritma salah. Tidak bisa membaca kredensial. @@ -58,7 +58,7 @@ Konfirmasi Kata Sandi Buatkan Kata Sandi Pengelola File - Tidak bisa menemukan file. Cobalah buka kembali dari pengelola file anda. + Tidak bisa menemukan file. Cobalah buka kembali dari pengelola file Anda. Nilai Bidang Nama Bidang Teks ini tidak sesuai dengan item yang diminta. @@ -67,7 +67,7 @@ Penghitung harus antara %1$d dan %2$d. Kunci rahasia harus dalam format Base32. Tidak dapat menyimpan basis data. - Tidak bisa membuat basisdata dengan kata sandi dan file kunci ini. + Tidak bisa membuat basis data dengan kata sandi dan file kunci ini. Tidak bisa membuat berkas database. Anda tidak bisa menyalin grup di sini. Anda tidak dapat menyalin entri di sini. @@ -82,17 +82,17 @@ Setidaknya ada satu jenis pembuatan kata sandi yang harus dipilih. Tidak bisa memuat kunci. Cobalah untuk mengurangi penggunaan memori (mematikan aplikasi lainnya). Tidak dapat memuat basis data. - Tidak cukup memori untuk memuat seluruh basisdata anda. + Tidak cukup memori untuk memuat seluruh basis data Anda. File Kunci Pilih file kunci. Ketik sebuah nama. Rahasia OTP tidak valid. Pastikan lokasi filenya sudah benar. - Tidak bisa membaca basisdata. + Tidak bisa membaca basis data. Tidak bisa membuat file Tambahkan Lampiran Dijit - Waktu idle sebelum mengunci basisdata + Waktu idle sebelum mengunci basis data Manajer file yang menerima ACTION_CREATE_DOCUMENT ACTION_OPEN_DOCUMENT izin diperlukan untuk membuat, membuka, dan menyimpan file database. Jenis OTP Penyiapan Sandi Sekali Pakai (OTP) @@ -110,9 +110,9 @@ Simpan Kata Sandi Tidak bisa menemukan data entri. - Mengambil kunci basisdata… + Mengambil kunci basis data… Tidak bisa membersihkan papan klip - Durasi simpan pada papan klip (jika didukung oleh perangkat anda) + Durasi simpan pada papan klip (jika didukung oleh perangkat Anda) Ulangi Peralihan Penampakan Kata Sandi Batas Waktu Papan Klip Papan Klip Dibersihkan @@ -129,8 +129,8 @@ Untuk <strong>menjaga kebebasan kami</strong>, <strong>memperbaiki bug</strong>, <strong> menambah fitur</strong> dan <strong>agar selalu aktif</strong>, kami mengandalkan <strong> kontribusi</strong>. KeePassDX © %1$d Kunzisoft <strong>open source</strong> dan <strong>tanpa iklan</strong>. \nTersedia apa adanya, di bawah lisensi <strong>GPLv3</strong>, tanpa jaminan apa pun. - Gunakan sebagai basisdata standar - Mendekripsi konten basisdata… + Gunakan sebagai basis data standar + Mendekripsi konten basis data… BasisData Pilih untuk menyalin %1$s ke papan klip Tutup Bidang @@ -177,21 +177,21 @@ Kontak Minta pencarian saat membuka database Pencarian cepat - Buat basisdata baru - Buka basisdata yang sudah ada + Buat basis data baru + Buka basis data yang sudah ada Pasang browser web untuk membuka URL ini. Penggunaan memori Putaran transformasi - Algoritma enkripsi basisdata digunakan untuk semua data + Algoritma enkripsi basis data digunakan untuk semua data Root - Sembunyikan tautan yang rusak dalam daftar basisdata terbaru - Sembunyikan tautan basisdata yang rusak - Tampilkan lokasi dari basisdata terbaru + Sembunyikan tautan yang rusak dalam daftar basis data terbaru + Sembunyikan tautan basis data yang rusak + Tampilkan lokasi dari basis data terbaru Tampilkan file sebelumnya Melacak di mana file kunci disimpan Ingat lokasi file kunci Melacak di mana database disimpan - Ingat lokasi basisdata + Ingat lokasi basis data Mode seleksi Selesaikan masalah dengan menghasilkan UUID baru, lanjutkan\? Basisdata berisi UUIDs duplikat. @@ -199,7 +199,7 @@ Terlindung dari penulisan Perlindungan Sedang bekerja… - Membuat basisdata baru… + Membuat basis data baru… Cari Domain Web dengan Kendala Subdomain Pencarian Subdomain Jumlah maksimal @@ -227,7 +227,7 @@ Judul Jangan tutup aplikasi… Menjalankan perintah… - Menyimpan basisdata… + Menyimpan basis data… Tidak dapat membangun ulang daftar. Magikeyboard Papan tik @@ -377,29 +377,29 @@ Timbul galat saat mengunggah data berkas. File yang Anda unggah terlalu besar. Info sandi satu kali - Buka basisdata yang sudah ada - Simpan otomatis basisdata - Tambah item ke basisdata anda + Buka basis data yang sudah ada + Simpan otomatis basis data + Tambah item ke basis data Anda Sunting entri - Buat berkas basisdata anda + Buat berkas basis data Anda Hapus kata sandi Pengurutan item Terima kasih banyak atas kontribusinya. Dengan <strong>berkontribusi</strong>, - Kunci basisdata - Buka basisdata anda + Kunci basis data + Buka basis data Anda Salin bidang Atur OTP Partisipasi - Buka basisdata dengan pengenalan pembuka kunci tingkat lanjut + Buka basis data dengan pengenalan pembuka kunci tingkat lanjut Anda tetap harus mengingat kata sandi utama Anda jika Anda menggunakan pengenalan pembukaan kunci tingkat lanjut. - Akses ke berkas dicabut oleh pengelola berkas, tutup basisdata dan buka kembali dari lokasi tempatnya. + Akses ke berkas dicabut oleh pengelola berkas, tutup basis data dan buka kembali dari lokasi tempatnya. Gabungkan data, timpa perubahan dengan cara menyimpan database atau muat ulang dengan perubahan terbaru. - Informasi yang tersimpan di berkas basisdata Anda sudah diubah di luar aplikasi. + Informasi yang tersimpan di berkas basis data Anda sudah diubah di luar aplikasi. Lanjut tanpa kunci enkripsi\? Lanjut tanpa proteksi buka kunci dengan kata sandi\? Akses ke berkas dicabut oleh pengelola berkas - Berikan akses tulis berkas untuk menyimpan perubahan basisdata + Berikan akses tulis berkas untuk menyimpan perubahan basis data Setelan Galat ketika mengekspor setelan aplikasi Setelan aplikasi diekspor @@ -410,7 +410,7 @@ Ekspor setelan aplikasi Pilih sebuah berkas untuk mengimpor setelan aplikasi Impor setelan aplikasi - Timbul galat ketika melaksanakan sebuah aksi di basisdata. + Timbul galat ketika melaksanakan sebuah aksi di basis data. Anda tidak dapat memindahkan sebuah grup ke sini. Membuka kredensial perangkat Memperbolehkan Anda memindai biometrik Anda untuk membuka basis data From f9dc456032c8ec6430c1e90215129c15cf0e268e Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Sun, 22 Jan 2023 15:10:36 +0100 Subject: [PATCH 39/49] fix: remove ChallengeResponseViewModel and add HardwareKeyActivity --- app/src/main/AndroidManifest.xml | 2 + .../SetMainCredentialDialogFragment.kt | 6 +- .../activities/legacy/DatabaseActivity.kt | 5 +- .../database/action/DatabaseTaskProvider.kt | 93 ++++------- .../keepass/hardware/HardwareKeyActivity.kt | 150 ++++++++++++++++++ .../hardware/HardwareKeyResponseHelper.kt | 144 ----------------- .../DatabaseTaskNotificationService.kt | 22 ++- .../viewmodels/ChallengeResponseViewModel.kt | 25 --- 8 files changed, 203 insertions(+), 244 deletions(-) create mode 100644 app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt delete mode 100644 app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyResponseHelper.kt delete mode 100644 app/src/main/java/com/kunzisoft/keepass/viewmodels/ChallengeResponseViewModel.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index df3349851..9a7f47446 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -156,6 +156,8 @@ android:name="com.kunzisoft.keepass.settings.SettingsAdvancedUnlockActivity" /> + hardwareKeyCheckBox.isChecked = true hardwareKeySelectionView.error = - if (!HardwareKeyResponseHelper.isHardwareKeyAvailable(requireActivity(), hardwareKey)) { + if (!HardwareKeyActivity.isHardwareKeyAvailable(requireActivity(), hardwareKey)) { // show hardware driver dialog if required getString(R.string.error_driver_required, hardwareKey.toString()) } else { @@ -231,7 +231,7 @@ class SetMainCredentialDialogFragment : DatabaseDialogFragment() { showEmptyPasswordConfirmationDialog() } else if (!error && hardwareKey != null - && !HardwareKeyResponseHelper.isHardwareKeyAvailable( + && !HardwareKeyActivity.isHardwareKeyAvailable( requireActivity(), hardwareKey, false) ) { // show hardware driver dialog if required diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseActivity.kt index 8fa08476b..a71ac1434 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseActivity.kt @@ -9,7 +9,6 @@ import com.kunzisoft.keepass.database.element.Database import com.kunzisoft.keepass.database.element.MainCredential import com.kunzisoft.keepass.model.CipherEncryptDatabase import com.kunzisoft.keepass.tasks.ActionRunnable -import com.kunzisoft.keepass.viewmodels.ChallengeResponseViewModel import com.kunzisoft.keepass.viewmodels.DatabaseViewModel abstract class DatabaseActivity: StylishActivity(), DatabaseRetrieval { @@ -18,12 +17,10 @@ abstract class DatabaseActivity: StylishActivity(), DatabaseRetrieval { protected var mDatabaseTaskProvider: DatabaseTaskProvider? = null protected var mDatabase: Database? = null - private val mChallengeResponseViewModel: ChallengeResponseViewModel by viewModels() - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - mDatabaseTaskProvider = DatabaseTaskProvider(this, mChallengeResponseViewModel) + mDatabaseTaskProvider = DatabaseTaskProvider(this) mDatabaseTaskProvider?.onDatabaseRetrieved = { database -> val databaseWasReloaded = database?.wasReloaded == true diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/DatabaseTaskProvider.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/DatabaseTaskProvider.kt index a99d73b22..fff9fea66 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/DatabaseTaskProvider.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/DatabaseTaskProvider.kt @@ -19,7 +19,6 @@ */ package com.kunzisoft.keepass.database.action -import android.app.Service import android.content.* import android.content.Context.* import android.net.Uri @@ -43,13 +42,13 @@ import com.kunzisoft.keepass.database.element.database.CompressionAlgorithm import com.kunzisoft.keepass.database.element.node.Node import com.kunzisoft.keepass.database.element.node.NodeId import com.kunzisoft.keepass.database.element.node.Type -import com.kunzisoft.keepass.database.exception.InvalidCredentialsDatabaseException import com.kunzisoft.keepass.hardware.HardwareKey -import com.kunzisoft.keepass.hardware.HardwareKeyResponseHelper +import com.kunzisoft.keepass.hardware.HardwareKeyActivity import com.kunzisoft.keepass.model.CipherEncryptDatabase import com.kunzisoft.keepass.model.ProgressMessage import com.kunzisoft.keepass.model.SnapFileDatabaseInfo import com.kunzisoft.keepass.services.DatabaseTaskNotificationService +import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.ACTION_CHALLENGE_RESPONDED import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_ASSIGN_PASSWORD_TASK import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_COPY_NODES_TASK import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_CREATE_ENTRY_TASK @@ -86,7 +85,6 @@ import com.kunzisoft.keepass.tasks.ProgressTaskDialogFragment import com.kunzisoft.keepass.tasks.ProgressTaskDialogFragment.Companion.PROGRESS_TASK_DIALOG_TAG import com.kunzisoft.keepass.utils.DATABASE_START_TASK_ACTION import com.kunzisoft.keepass.utils.DATABASE_STOP_TASK_ACTION -import com.kunzisoft.keepass.viewmodels.ChallengeResponseViewModel import kotlinx.coroutines.launch import java.util.* @@ -94,10 +92,11 @@ import java.util.* * Utility class to connect an activity or a service to the DatabaseTaskNotificationService, * Useful to retrieve a database instance and sending tasks commands */ -class DatabaseTaskProvider { +class DatabaseTaskProvider(private var context: Context) { - private var activity: FragmentActivity? = null - private var context: Context + // To show dialog only if context is an activity + private var activity: FragmentActivity? = try { context as? FragmentActivity? } + catch (_: Exception) { null } var onDatabaseRetrieved: ((database: Database?) -> Unit)? = null @@ -105,7 +104,10 @@ class DatabaseTaskProvider { actionTask: String, result: ActionRunnable.Result) -> Unit)? = null - private var intentDatabaseTask: Intent + private var intentDatabaseTask: Intent = Intent( + context.applicationContext, + DatabaseTaskNotificationService::class.java + ) private var databaseTaskBroadcastReceiver: BroadcastReceiver? = null private var mBinder: DatabaseTaskNotificationService.ActionTaskBinder? = null @@ -115,54 +117,6 @@ class DatabaseTaskProvider { private var progressTaskDialogFragment: ProgressTaskDialogFragment? = null private var databaseChangedDialogFragment: DatabaseChangedDialogFragment? = null - private var mChallengeResponseViewModel: ChallengeResponseViewModel? = null - - constructor(activity: FragmentActivity, - challengeResponseViewModel: ChallengeResponseViewModel) { - this.activity = activity - this.context = activity - this.intentDatabaseTask = Intent(activity.applicationContext, - DatabaseTaskNotificationService::class.java) - - // ViewModel used to keep response if activity recreated - this.mChallengeResponseViewModel = challengeResponseViewModel - // To manage hardware key challenge response - val hardwareKeyResponseHelper = HardwareKeyResponseHelper(activity) - hardwareKeyResponseHelper.buildHardwareKeyResponse { responseData, _ -> - // TODO Verify database - // Send to view model in case activity is restarted and not yet connected to service - challengeResponseViewModel.respond(responseData ?: ByteArray(0)) - } - challengeResponseViewModel.dataResponded.observe(activity) { response -> - // Consume the response - if (response != null) { - val binder = mBinder - if (binder != null) { - binder.getService().respondToChallenge(response) - challengeResponseViewModel.consumeResponse() - } - } - } - - this.requestChallengeListener = object: DatabaseTaskNotificationService.RequestChallengeListener { - override fun onChallengeResponseRequested(hardwareKey: HardwareKey, seed: ByteArray?) { - if (HardwareKeyResponseHelper.isHardwareKeyAvailable(activity, hardwareKey)) { - hardwareKeyResponseHelper.launchChallengeForResponse(hardwareKey, seed) - } else { - throw InvalidCredentialsDatabaseException( - context.getString(R.string.error_driver_required, hardwareKey.toString()) - ) - } - } - } - } - - constructor(service: Service) { - this.context = service - this.intentDatabaseTask = Intent(service.applicationContext, - DatabaseTaskNotificationService::class.java) - } - fun destroy() { this.activity = null this.onDatabaseRetrieved = null @@ -172,7 +126,6 @@ class DatabaseTaskProvider { this.serviceConnection = null this.progressTaskDialogFragment = null this.databaseChangedDialogFragment = null - this.mChallengeResponseViewModel = null } private val actionTaskListener = object: DatabaseTaskNotificationService.ActionTaskListener { @@ -235,7 +188,19 @@ class DatabaseTaskProvider { } } - private var requestChallengeListener: DatabaseTaskNotificationService.RequestChallengeListener? = null + private var requestChallengeListener = object: DatabaseTaskNotificationService.RequestChallengeListener { + override fun onChallengeResponseRequested( + hardwareKey: HardwareKey, + seed: ByteArray? + ) { + HardwareKeyActivity + .launchHardwareKeyActivity( + context, + hardwareKey, + seed + ) + } + } private fun startDialog(progressMessage: ProgressMessage) { activity?.let { activity -> @@ -280,7 +245,6 @@ class DatabaseTaskProvider { getService().checkDatabaseInfo() getService().checkAction() } - mChallengeResponseViewModel?.resendResponse() } override fun onServiceDisconnected(name: ComponentName?) { @@ -295,9 +259,7 @@ class DatabaseTaskProvider { service?.addDatabaseListener(databaseListener) service?.addDatabaseFileInfoListener(databaseInfoListener) service?.addActionTaskListener(actionTaskListener) - requestChallengeListener?.let { - service?.addRequestChallengeListener(it) - } + service?.setRequestChallengeListener(requestChallengeListener) } private fun removeServiceListeners(service: DatabaseTaskNotificationService.ActionTaskBinder?) { @@ -762,6 +724,13 @@ class DatabaseTaskProvider { , ACTION_DATABASE_SAVE) } + fun startChallengeResponded(response: ByteArray?) { + start(Bundle().apply { + putByteArray(DatabaseTaskNotificationService.DATA_BYTES, response) + } + , ACTION_CHALLENGE_RESPONDED) + } + companion object { private val TAG = DatabaseTaskProvider::class.java.name } diff --git a/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt b/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt new file mode 100644 index 000000000..d31dc0c5e --- /dev/null +++ b/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt @@ -0,0 +1,150 @@ +package com.kunzisoft.keepass.hardware + +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.util.Log +import androidx.activity.result.ActivityResult +import androidx.activity.result.ActivityResultCallback +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AlertDialog +import com.kunzisoft.keepass.R +import com.kunzisoft.keepass.activities.legacy.DatabaseActivity +import com.kunzisoft.keepass.database.element.Database +import com.kunzisoft.keepass.utils.UriUtil + +/** + * Special activity to deal with hardware key drivers, + * return the response to the database service once finished + */ +class HardwareKeyActivity: DatabaseActivity(){ + + // To manage hardware key challenge response + private val resultCallback = ActivityResultCallback { result -> + if (result.resultCode == Activity.RESULT_OK) { + val challengeResponse: ByteArray? = result.data?.getByteArrayExtra(HARDWARE_KEY_RESPONSE_KEY) + Log.d(TAG, "Response form challenge") + mDatabaseTaskProvider?.startChallengeResponded(challengeResponse ?: ByteArray(0)) + } else { + Log.e(TAG, "Response from challenge error") + mDatabaseTaskProvider?.startChallengeResponded(ByteArray(0)) + } + finish() + } + + private var activityResultLauncher: ActivityResultLauncher = registerForActivityResult( + ActivityResultContracts.StartActivityForResult(), + resultCallback + ) + + override fun onDatabaseRetrieved(database: Database?) { + super.onDatabaseRetrieved(database) + + val hardwareKey = HardwareKey.getHardwareKeyFromString( + intent.getStringExtra(DATA_HARDWARE_KEY) + ) + if (isHardwareKeyAvailable(this, hardwareKey)) { + when (hardwareKey) { + /* + HardwareKey.FIDO2_SECRET -> { + // TODO FIDO2 under development + throw Exception("FIDO2 not implemented") + } + */ + HardwareKey.CHALLENGE_RESPONSE_YUBIKEY -> { + launchYubikeyChallengeForResponse(intent.getByteArrayExtra(DATA_SEED)) + } + else -> { + finish() + } + } + } else { + finish() + } + } + + private fun launchYubikeyChallengeForResponse(seed: ByteArray?) { + // Transform the seed before sending + var challenge: ByteArray? = null + if (seed != null) { + challenge = ByteArray(64) + seed.copyInto(challenge, 0, 0, 32) + challenge.fill(32, 32, 64) + } + // Send to the driver + activityResultLauncher.launch( + Intent(YUBIKEY_CHALLENGE_RESPONSE_INTENT).apply { + putExtra(HARDWARE_KEY_CHALLENGE_KEY, challenge) + } + ) + Log.d(TAG, "Challenge sent") + } + + companion object { + private val TAG = HardwareKeyActivity::class.java.simpleName + + private const val DATA_HARDWARE_KEY = "DATA_HARDWARE_KEY" + private const val DATA_SEED = "DATA_SEED" + private const val YUBIKEY_CHALLENGE_RESPONSE_INTENT = "android.yubikey.intent.action.CHALLENGE_RESPONSE" + private const val HARDWARE_KEY_CHALLENGE_KEY = "challenge" + private const val HARDWARE_KEY_RESPONSE_KEY = "response" + + fun launchHardwareKeyActivity( + context: Context, + hardwareKey: HardwareKey, + seed: ByteArray? + ) { + context.startActivity(Intent(context, HardwareKeyActivity::class.java).apply { + //flags = FLAG_ACTIVITY_NEW_TASK + putExtra(DATA_HARDWARE_KEY, hardwareKey.value) + putExtra(DATA_SEED, seed) + }) + } + + fun isHardwareKeyAvailable( + context: Context, + hardwareKey: HardwareKey?, + showDialog: Boolean = true + ): Boolean { + if (hardwareKey == null) + return false + return when (hardwareKey) { + /* + HardwareKey.FIDO2_SECRET -> { + // TODO FIDO2 under development + if (showDialog) + UnderDevelopmentFeatureDialogFragment() + .show(activity.supportFragmentManager, "underDevFeatureDialog") + false + } + */ + HardwareKey.CHALLENGE_RESPONSE_YUBIKEY -> { + // Check available intent + val yubikeyDriverAvailable = + Intent(YUBIKEY_CHALLENGE_RESPONSE_INTENT) + .resolveActivity(context.packageManager) != null + if (showDialog && !yubikeyDriverAvailable) + showHardwareKeyDriverNeeded(context, hardwareKey) + yubikeyDriverAvailable + } + } + } + + private fun showHardwareKeyDriverNeeded( + context: Context, + hardwareKey: HardwareKey + ) { + val builder = AlertDialog.Builder(context) + builder + .setMessage( + context.getString(R.string.error_driver_required, hardwareKey.toString()) + ) + .setPositiveButton(R.string.download) { _, _ -> + UriUtil.openExternalApp(context, context.getString(R.string.key_driver_app_id)) + } + .setNegativeButton(android.R.string.cancel) { _, _ -> } + builder.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyResponseHelper.kt b/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyResponseHelper.kt deleted file mode 100644 index 256cce671..000000000 --- a/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyResponseHelper.kt +++ /dev/null @@ -1,144 +0,0 @@ -package com.kunzisoft.keepass.hardware - -import android.app.Activity -import android.content.Intent -import android.os.Bundle -import android.util.Log -import androidx.activity.result.ActivityResult -import androidx.activity.result.ActivityResultCallback -import androidx.activity.result.ActivityResultLauncher -import androidx.activity.result.contract.ActivityResultContracts -import androidx.appcompat.app.AlertDialog -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentActivity -import androidx.lifecycle.lifecycleScope -import com.kunzisoft.keepass.R -import com.kunzisoft.keepass.utils.UriUtil -import kotlinx.coroutines.launch - -class HardwareKeyResponseHelper { - - private var activity: FragmentActivity? = null - private var fragment: Fragment? = null - - private var getChallengeResponseResultLauncher: ActivityResultLauncher? = null - - constructor(context: FragmentActivity) { - this.activity = context - this.fragment = null - } - - constructor(context: Fragment) { - this.activity = context.activity - this.fragment = context - } - - fun buildHardwareKeyResponse(onChallengeResponded: (challengeResponse: ByteArray?, - extra: Bundle?) -> Unit) { - val resultCallback = ActivityResultCallback { result -> - if (result.resultCode == Activity.RESULT_OK) { - val challengeResponse: ByteArray? = result.data?.getByteArrayExtra(HARDWARE_KEY_RESPONSE_KEY) - Log.d(TAG, "Response form challenge") - onChallengeResponded.invoke(challengeResponse, - result.data?.getBundleExtra(EXTRA_BUNDLE_KEY)) - } else { - Log.e(TAG, "Response from challenge error") - onChallengeResponded.invoke(null, - result.data?.getBundleExtra(EXTRA_BUNDLE_KEY)) - } - } - - getChallengeResponseResultLauncher = if (fragment != null) { - fragment?.registerForActivityResult( - ActivityResultContracts.StartActivityForResult(), - resultCallback - ) - } else { - activity?.registerForActivityResult( - ActivityResultContracts.StartActivityForResult(), - resultCallback - ) - } - } - - fun launchChallengeForResponse(hardwareKey: HardwareKey, seed: ByteArray?) { - when (hardwareKey) { - /* - HardwareKey.FIDO2_SECRET -> { - // TODO FIDO2 under development - throw Exception("FIDO2 not implemented") - } - */ - HardwareKey.CHALLENGE_RESPONSE_YUBIKEY -> { - // Transform the seed before sending - var challenge: ByteArray? = null - if (seed != null) { - challenge = ByteArray(64) - seed.copyInto(challenge, 0, 0, 32) - challenge.fill(32, 32, 64) - } - // Send to the driver - getChallengeResponseResultLauncher!!.launch( - Intent(YUBIKEY_CHALLENGE_RESPONSE_INTENT).apply { - putExtra(HARDWARE_KEY_CHALLENGE_KEY, challenge) - } - ) - Log.d(TAG, "Challenge sent") - } - } - } - - companion object { - private val TAG = HardwareKeyResponseHelper::class.java.simpleName - - private const val YUBIKEY_CHALLENGE_RESPONSE_INTENT = "android.yubikey.intent.action.CHALLENGE_RESPONSE" - private const val HARDWARE_KEY_CHALLENGE_KEY = "challenge" - private const val HARDWARE_KEY_RESPONSE_KEY = "response" - private const val EXTRA_BUNDLE_KEY = "EXTRA_BUNDLE_KEY" - - fun isHardwareKeyAvailable( - activity: FragmentActivity, - hardwareKey: HardwareKey, - showDialog: Boolean = true - ): Boolean { - return when (hardwareKey) { - /* - HardwareKey.FIDO2_SECRET -> { - // TODO FIDO2 under development - if (showDialog) - UnderDevelopmentFeatureDialogFragment() - .show(activity.supportFragmentManager, "underDevFeatureDialog") - false - } - */ - HardwareKey.CHALLENGE_RESPONSE_YUBIKEY -> { - // Check available intent - val yubikeyDriverAvailable = - Intent(YUBIKEY_CHALLENGE_RESPONSE_INTENT) - .resolveActivity(activity.packageManager) != null - if (showDialog && !yubikeyDriverAvailable) - showHardwareKeyDriverNeeded(activity, hardwareKey) - yubikeyDriverAvailable - } - } - } - - private fun showHardwareKeyDriverNeeded( - activity: FragmentActivity, - hardwareKey: HardwareKey - ) { - activity.lifecycleScope.launch { - val builder = AlertDialog.Builder(activity) - builder - .setMessage( - activity.getString(R.string.error_driver_required, hardwareKey.toString()) - ) - .setPositiveButton(R.string.download) { _, _ -> - UriUtil.openExternalApp(activity, activity.getString(R.string.key_driver_app_id)) - } - .setNegativeButton(android.R.string.cancel) { _, _ -> } - builder.create().show() - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt b/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt index 673cb52a6..254ae5c2b 100644 --- a/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt +++ b/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt @@ -124,8 +124,8 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress mActionTaskListeners.remove(actionTaskListener) } - @ExperimentalCoroutinesApi - fun addRequestChallengeListener(requestChallengeListener: RequestChallengeListener) { + @OptIn(ExperimentalCoroutinesApi::class) + fun setRequestChallengeListener(requestChallengeListener: RequestChallengeListener) { mainScope.launch { val requestChannel = mRequestChallengeListenerChannel if (requestChannel == null || requestChannel.isEmpty) { @@ -169,7 +169,10 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress } interface RequestChallengeListener { - fun onChallengeResponseRequested(hardwareKey: HardwareKey, seed: ByteArray?) + fun onChallengeResponseRequested( + hardwareKey: HardwareKey, + seed: ByteArray? + ) } fun checkDatabase() { @@ -270,8 +273,8 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress mResponseChallengeChannel = null } - @ExperimentalCoroutinesApi - fun respondToChallenge(response: ByteArray) { + @OptIn(ExperimentalCoroutinesApi::class) + private fun respondToChallenge(response: ByteArray) { mainScope.launch { val responseChannel = mResponseChallengeChannel if (responseChannel == null || responseChannel.isEmpty) { @@ -323,6 +326,12 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress stopSelf() } + if (intentAction == ACTION_CHALLENGE_RESPONDED) { + intent.getByteArrayExtra(DATA_BYTES)?.let { + respondToChallenge(it) + } + } + val actionRunnable: ActionRunnable? = when (intentAction) { ACTION_DATABASE_CREATE_TASK -> buildDatabaseCreateActionTask(intent, database) ACTION_DATABASE_LOAD_TASK -> buildDatabaseLoadActionTask(intent, database) @@ -756,7 +765,6 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress databaseToMergeUri, databaseToMergeMainCredential, { hardwareKey, seed -> - // TODO fix first challenge response retrieveResponseFromChallenge(hardwareKey, seed) }, database, @@ -1157,6 +1165,7 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress const val ACTION_DATABASE_UPDATE_PARALLELISM_TASK = "ACTION_DATABASE_UPDATE_PARALLELISM_TASK" const val ACTION_DATABASE_UPDATE_ITERATIONS_TASK = "ACTION_DATABASE_UPDATE_ITERATIONS_TASK" const val ACTION_DATABASE_SAVE = "ACTION_DATABASE_SAVE" + const val ACTION_CHALLENGE_RESPONDED = "ACTION_CHALLENGE_RESPONDED" const val DATABASE_TASK_TITLE_KEY = "DATABASE_TASK_TITLE_KEY" const val DATABASE_TASK_MESSAGE_KEY = "DATABASE_TASK_MESSAGE_KEY" @@ -1180,6 +1189,7 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress const val NEW_NODES_KEY = "NEW_NODES_KEY" const val OLD_ELEMENT_KEY = "OLD_ELEMENT_KEY" // Warning type of this thing change every time const val NEW_ELEMENT_KEY = "NEW_ELEMENT_KEY" // Warning type of this thing change every time + const val DATA_BYTES = "DATA_BYTES" fun getListNodesFromBundle(database: Database, bundle: Bundle): List { val nodesAction = ArrayList() diff --git a/app/src/main/java/com/kunzisoft/keepass/viewmodels/ChallengeResponseViewModel.kt b/app/src/main/java/com/kunzisoft/keepass/viewmodels/ChallengeResponseViewModel.kt deleted file mode 100644 index 5134e7be8..000000000 --- a/app/src/main/java/com/kunzisoft/keepass/viewmodels/ChallengeResponseViewModel.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.kunzisoft.keepass.viewmodels - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel - -class ChallengeResponseViewModel: ViewModel() { - - val dataResponded : LiveData get() = _dataResponded - private val _dataResponded = MutableLiveData() - - fun respond(byteArray: ByteArray) { - _dataResponded.value = byteArray - } - - fun resendResponse() { - dataResponded.value?.let { - _dataResponded.value = it - } - } - - fun consumeResponse() { - _dataResponded.value = null - } -} \ No newline at end of file From 9cec64ded4b4430b8b1bc39565865b7cd82d99c2 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Sun, 22 Jan 2023 20:21:17 +0100 Subject: [PATCH 40/49] fix: better challenge channel implementation --- .../database/action/DatabaseTaskProvider.kt | 18 --- .../keepass/hardware/HardwareKeyActivity.kt | 3 +- .../DatabaseTaskNotificationService.kt | 109 ++++++++---------- 3 files changed, 49 insertions(+), 81 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/DatabaseTaskProvider.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/DatabaseTaskProvider.kt index fff9fea66..76cd48e4e 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/DatabaseTaskProvider.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/DatabaseTaskProvider.kt @@ -42,8 +42,6 @@ import com.kunzisoft.keepass.database.element.database.CompressionAlgorithm import com.kunzisoft.keepass.database.element.node.Node import com.kunzisoft.keepass.database.element.node.NodeId import com.kunzisoft.keepass.database.element.node.Type -import com.kunzisoft.keepass.hardware.HardwareKey -import com.kunzisoft.keepass.hardware.HardwareKeyActivity import com.kunzisoft.keepass.model.CipherEncryptDatabase import com.kunzisoft.keepass.model.ProgressMessage import com.kunzisoft.keepass.model.SnapFileDatabaseInfo @@ -188,20 +186,6 @@ class DatabaseTaskProvider(private var context: Context) { } } - private var requestChallengeListener = object: DatabaseTaskNotificationService.RequestChallengeListener { - override fun onChallengeResponseRequested( - hardwareKey: HardwareKey, - seed: ByteArray? - ) { - HardwareKeyActivity - .launchHardwareKeyActivity( - context, - hardwareKey, - seed - ) - } - } - private fun startDialog(progressMessage: ProgressMessage) { activity?.let { activity -> activity.lifecycleScope.launch { @@ -259,14 +243,12 @@ class DatabaseTaskProvider(private var context: Context) { service?.addDatabaseListener(databaseListener) service?.addDatabaseFileInfoListener(databaseInfoListener) service?.addActionTaskListener(actionTaskListener) - service?.setRequestChallengeListener(requestChallengeListener) } private fun removeServiceListeners(service: DatabaseTaskNotificationService.ActionTaskBinder?) { service?.removeActionTaskListener(actionTaskListener) service?.removeDatabaseFileInfoListener(databaseInfoListener) service?.removeDatabaseListener(databaseListener) - service?.removeRequestChallengeListener() } private fun bindService() { diff --git a/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt b/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt index d31dc0c5e..de86005b9 100644 --- a/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt @@ -3,6 +3,7 @@ package com.kunzisoft.keepass.hardware import android.app.Activity import android.content.Context import android.content.Intent +import android.content.Intent.FLAG_ACTIVITY_NEW_TASK import android.util.Log import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback @@ -96,7 +97,7 @@ class HardwareKeyActivity: DatabaseActivity(){ seed: ByteArray? ) { context.startActivity(Intent(context, HardwareKeyActivity::class.java).apply { - //flags = FLAG_ACTIVITY_NEW_TASK + flags = FLAG_ACTIVITY_NEW_TASK putExtra(DATA_HARDWARE_KEY, hardwareKey.value) putExtra(DATA_SEED, seed) }) diff --git a/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt b/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt index 254ae5c2b..d8a70e9e9 100644 --- a/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt +++ b/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt @@ -44,6 +44,7 @@ import com.kunzisoft.keepass.database.element.node.Node import com.kunzisoft.keepass.database.element.node.NodeId import com.kunzisoft.keepass.database.element.node.Type import com.kunzisoft.keepass.hardware.HardwareKey +import com.kunzisoft.keepass.hardware.HardwareKeyActivity import com.kunzisoft.keepass.model.CipherEncryptDatabase import com.kunzisoft.keepass.model.ProgressMessage import com.kunzisoft.keepass.model.SnapFileDatabaseInfo @@ -75,8 +76,7 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress private var mDatabaseInfoListeners = mutableListOf() private var mActionTaskBinder = ActionTaskBinder() private var mActionTaskListeners = mutableListOf() - // Channel to connect asynchronously a listener or a response - private var mRequestChallengeListenerChannel: Channel? = null + // Channel to connect asynchronously a response private var mResponseChallengeChannel: Channel? = null private var mActionRunning = false @@ -123,30 +123,6 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress fun removeActionTaskListener(actionTaskListener: ActionTaskListener) { mActionTaskListeners.remove(actionTaskListener) } - - @OptIn(ExperimentalCoroutinesApi::class) - fun setRequestChallengeListener(requestChallengeListener: RequestChallengeListener) { - mainScope.launch { - val requestChannel = mRequestChallengeListenerChannel - if (requestChannel == null || requestChannel.isEmpty) { - initializeChallengeResponse() - mRequestChallengeListenerChannel?.send(requestChallengeListener) - } else { - cancelChallengeResponse(R.string.error_challenge_already_requested) - } - } - } - - fun removeRequestChallengeListener() { - mainScope.launch { - try { - mRequestChallengeListenerChannel?.cancel() - } catch (e: Exception) { - Log.w(TAG, "Request challenge listener cannot be closed.", e) - } - mRequestChallengeListenerChannel = null - } - } } interface DatabaseListener { @@ -249,32 +225,8 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress } } - private fun initializeChallengeResponse() { - // Init the channels - if (mRequestChallengeListenerChannel == null) { - mRequestChallengeListenerChannel = Channel(0) - } - if (mResponseChallengeChannel == null) { - mResponseChallengeChannel = Channel(0) - } - } - - private fun closeChallengeResponse() { - mRequestChallengeListenerChannel?.close() - mResponseChallengeChannel?.close() - mRequestChallengeListenerChannel = null - mResponseChallengeChannel = null - } - - private fun cancelChallengeResponse(@StringRes error: Int) { - mRequestChallengeListenerChannel?.cancel(CancellationException(getString(error))) - mRequestChallengeListenerChannel = null - mResponseChallengeChannel?.cancel(CancellationException(getString(error))) - mResponseChallengeChannel = null - } - @OptIn(ExperimentalCoroutinesApi::class) - private fun respondToChallenge(response: ByteArray) { + private fun sendResponseToChallenge(response: ByteArray) { mainScope.launch { val responseChannel = mResponseChallengeChannel if (responseChannel == null || responseChannel.isEmpty) { @@ -289,6 +241,23 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress } } + private fun initializeChallengeResponse() { + // Init the channels + if (mResponseChallengeChannel == null) { + mResponseChallengeChannel = Channel(0) + } + } + + private fun closeChallengeResponse() { + mResponseChallengeChannel?.close() + mResponseChallengeChannel = null + } + + private fun cancelChallengeResponse(@StringRes error: Int) { + mResponseChallengeChannel?.cancel(CancellationException(getString(error))) + mResponseChallengeChannel = null + } + override fun onBind(intent: Intent): IBinder? { super.onBind(intent) return mActionTaskBinder @@ -326,12 +295,6 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress stopSelf() } - if (intentAction == ACTION_CHALLENGE_RESPONDED) { - intent.getByteArrayExtra(DATA_BYTES)?.let { - respondToChallenge(it) - } - } - val actionRunnable: ActionRunnable? = when (intentAction) { ACTION_DATABASE_CREATE_TASK -> buildDatabaseCreateActionTask(intent, database) ACTION_DATABASE_LOAD_TASK -> buildDatabaseLoadActionTask(intent, database) @@ -362,7 +325,8 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress ACTION_DATABASE_UPDATE_MEMORY_USAGE_TASK, ACTION_DATABASE_UPDATE_PARALLELISM_TASK, ACTION_DATABASE_UPDATE_ITERATIONS_TASK -> buildDatabaseUpdateElementActionTask(intent, database) - ACTION_DATABASE_SAVE -> buildDatabaseSave(intent, database) + ACTION_DATABASE_SAVE -> buildDatabaseSaveActionTask(intent, database) + ACTION_CHALLENGE_RESPONDED -> buildChallengeRespondedActionTask(intent) else -> null } @@ -386,7 +350,6 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress database, mProgressMessage ) } - }, { actionRunnable @@ -659,8 +622,12 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress } // Send the request notifyProgressMessage() - val challengeResponseRequestListener = mRequestChallengeListenerChannel?.receive() - challengeResponseRequestListener?.onChallengeResponseRequested(hardwareKey, seed) + HardwareKeyActivity + .launchHardwareKeyActivity( + this@DatabaseTaskNotificationService, + hardwareKey, + seed + ) // Wait the response mProgressMessage.apply { messageId = R.string.waiting_challenge_response @@ -1108,7 +1075,7 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress /** * Save database without parameter */ - private fun buildDatabaseSave(intent: Intent, database: Database): ActionRunnable? { + private fun buildDatabaseSaveActionTask(intent: Intent, database: Database): ActionRunnable? { return if (intent.hasExtra(SAVE_DATABASE_KEY)) { var databaseCopyUri: Uri? = null @@ -1129,6 +1096,24 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress } } + private fun buildChallengeRespondedActionTask(intent: Intent): ActionRunnable? { + return if (intent.hasExtra(DATA_BYTES)) { + object : ActionRunnable() { + override fun onStartRun() {} + override fun onActionRun() { + mainScope.launch { + intent.getByteArrayExtra(DATA_BYTES)?.let { response -> + sendResponseToChallenge(response) + } + } + } + override fun onFinishRun() {} + } + } else { + null + } + } + companion object { private val TAG = DatabaseTaskNotificationService::class.java.name From ea3349eea4d96acf0ae1ecee196bd22f77c694e4 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Sun, 22 Jan 2023 20:33:29 +0100 Subject: [PATCH 41/49] fix: autofill with hardware key --- .../com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt b/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt index de86005b9..1965ce004 100644 --- a/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt @@ -11,7 +11,7 @@ import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AlertDialog import com.kunzisoft.keepass.R -import com.kunzisoft.keepass.activities.legacy.DatabaseActivity +import com.kunzisoft.keepass.activities.legacy.DatabaseModeActivity import com.kunzisoft.keepass.database.element.Database import com.kunzisoft.keepass.utils.UriUtil @@ -19,7 +19,7 @@ import com.kunzisoft.keepass.utils.UriUtil * Special activity to deal with hardware key drivers, * return the response to the database service once finished */ -class HardwareKeyActivity: DatabaseActivity(){ +class HardwareKeyActivity: DatabaseModeActivity(){ // To manage hardware key challenge response private val resultCallback = ActivityResultCallback { result -> From 0a19ecb715bc4ed5858e8a24125592526323d815 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Sun, 22 Jan 2023 20:59:11 +0100 Subject: [PATCH 42/49] fi: translation strong tags --- app/src/main/res/values-da/strings.xml | 18 +++++++++--------- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 4 ++-- app/src/main/res/values-gl/strings.xml | 16 ++++++++-------- app/src/main/res/values-ko/strings.xml | 2 +- app/src/main/res/values-lt/strings.xml | 6 +++--- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pt-rPT/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 4 ++-- 9 files changed, 28 insertions(+), 28 deletions(-) diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 902c0b904..a5ddc83bd 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -262,14 +262,14 @@ Vælg hvordan poster og grupper er sorteret. Deltag Hjælp med at øge stabiliteten og sikkerheden og med at tilføje flere funktioner. - I modsætning til andre apps til adgangskodeadministration er denne reklamefri, copyleft fri software, og indsamler ikke personlige data, uanset hvilken version der bruges. - Ved at købe pro-versionen får du adgang til visuel stil, og du vil især hjælpe med gennemførelsen af fællesskabets projekter. - Denne visuelle stil er tilgængelig takket være din generøsitet. - For at vi kan bevare vores frihed og altid være aktive, er vi afhængige af dit bidrag. + I modsætning til andre apps til adgangskodeadministration er denne <strong>reklamefri</strong>, <strong>copyleft fri software</strong>, og indsamler ikke personlige data, uanset hvilken version der bruges. + Ved at købe pro-versionen får du adgang til <strong>visuel stil</strong>, og du vil især hjælpe med <strong>gennemførelsen af fællesskabets projekter.</strong> + Denne <strong>visuelle stil</strong> er tilgængelig takket være din generøsitet. + For at vi kan bevare vores frihed og altid være aktive, er vi afhængige af dit <strong>bidrag.</strong> Funktionen er <strong>under udvikling</strong>, og det kræver <strong>bidrag</strong>, for snart at være tilgængelig. Ved at købe <strong>pro</strong> versionen, Ved at <strong>bidrage</strong>, - tilskyndes udviklerne til at lave nye funktioner og rette fejl i henhold dine bemærkninger. + tilskyndes udviklerne til at lave <strong>nye funktioner</strong> og <strong>rette fejl</strong> i henhold dine bemærkninger. Mange tak for dit bidrag. Vi arbejder hårdt på hurtigt at frigive denne funktion. Husk at holde din app opdateret ved at installere den nyeste version. @@ -408,9 +408,9 @@ Kontakt Bidrag Tilbagemelding - KeePassDX ©%1$d Kunzisoft er open source og uden reklamer. -\nDen leveres som den er, under GPLv3 licens, uden nogen form for garanti. - For at vi kan bevare vores frihed, rette fejl, tilføje funktioner og altid være aktive, er vi afhængige af bidrag. + KeePassDX ©%1$d Kunzisoft er <strong>open source</strong> og <strong>uden reklamer</strong>. +\nDen leveres som den er, under <strong>GPLv3</strong> licens, uden nogen form for garanti. + For at <strong>vi kan bevare vores frihed</strong>, <strong>rette fejl</strong>, <strong>tilføje funktioner</strong> og <strong>altid være aktive</strong>, er vi afhængige af <strong>bidrag</strong>. Hurtig søgning Anmod om søgning ved åbning af en database Husk placeringer af databaser @@ -651,7 +651,7 @@ \nKontroller KeyStore\'s kompatibilitet og sikkerhed med producenten af din enhed og skaberen af den ROM, du bruger. Entropi: %1$s bit Overvej tegn - Der hentes ingen brugerdata, denne applikation opretter ikke forbindelse til nogen server, kører kun lokalt og respekterer fuldt ud brugernes privatliv. + <strong>Der hentes ingen brugerdata</strong>, denne applikation opretter ikke forbindelse til nogen server, kører kun lokalt og respekterer fuldt ud brugernes privatliv. Navigationsskuffe åben Navigationsoverskrift Navigationsskuffe lukke diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 11c225b52..188d6ce87 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -250,7 +250,7 @@ Auswählen, wie Einträge und Gruppen sortiert werden. Mitmachen Mithelfen, um Stabilität und Sicherheit zu verbessern sowie weitere Funktionen zu ermöglichen. - Anders als viele andere Passwortmanager ist dieser werbefrei, quelloffen und unter einer Copyleft-Lizenz. Es werden keine persönlichen Daten gesammelt, egal in welcher Form, unabhängig von der verwendeten Version (kostenlos oder Pro). + Anders als viele andere Passwortmanager ist dieser <strong>werbefrei</strong>, <strong>quelloffen</strong> und unter einer <strong>Copyleft-Lizenz</strong>. Es werden keine persönlichen Daten gesammelt, egal in welcher Form, unabhängig von der verwendeten Version (kostenlos oder Pro). Mit dem Kauf der Pro-Version erhalten Sie Zugriff auf diesen <strong>visuellen Stil</strong> und unterstützen insbesondere <strong>die Umsetzung gemeinschaftlicher Projekte.</strong> Dieser <strong>visuelle Stil</strong> ist dank Ihrer Großzügigkeit verfügbar. Um unsere Freiheit zu bewahren und immer aktiv zu bleiben, zählen wir auf Ihren <strong>Beitrag.</strong> diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 7e0b04557..2770a8d3c 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -361,7 +361,7 @@ No se puede guardar la base de datos. Este texto no coincide con el elemento requerido. No se puede crear el archivo de la base de datos. - Parar lograr mantener nuestra libertad, corregir errores, añadir funciones y estar siempre activos, contamos con tu contribución. + Parar lograr <strong>mantener nuestra libertad</strong>, <strong>corregir errores</strong>, <strong>añadir funciones</strong> y <strong>estar siempre activos</strong>, contamos con tu <strong>contribución</strong>. Añadir elemento ¡Completado! Finalizando… @@ -651,7 +651,7 @@ Conteo de caracteres: %1$d Modo captura de pantalla La llave física no está soportada. - No se recuperan datos del usuario, esta aplicación no se conecta a ningún servidor, funciona solo localmente y respeta completamente la privacidad del usuario. + <strong>No se recuperan datos del usuario</strong>, esta aplicación no se conecta a ningún servidor, funciona solo localmente y respeta completamente la privacidad del usuario. Imposible fusionar desde una base de datos V1. Cancelado por el usuario. Imposible obtener la respuesta del desafío. diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 7096e021f..67f76acf1 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -605,8 +605,8 @@ Gardar a base de datos após unha acción importante (en modo \"Modificábel\") Manter a pantalla acesa ao ver unha entrada Modo captura de pantalla - Ao mercar a versión pro, terá acceso ao estilo visual e axudará especialmente a realizar proxectos comunitarios. - Ao contribuír, + Ao mercar a versión pro, terá acceso ao <strong>estilo visual</strong> e axudará especialmente a <strong> realizar proxectos comunitarios.</strong> + Ao <strong>contribuír</strong>, KiB Completado! Entropía: %1$s bit @@ -626,8 +626,8 @@ Entradas expiradas non son mostradas Participe Axude a aumentar a estabilidade, seguranza e número de funcionalidades. - Este estilo visual está dispoñíbel grazas á súa xenerosidade. - Para manter a nosa liberdade e estarmos sempre activos, contamos coa súa contribución. + Este <strong>estilo visual</strong> está dispoñíbel grazas á súa xenerosidade. + Para manter a nosa liberdade e estarmos sempre activos, contamos coa súa <strong>contribución.</strong> Descarregar %1$s A inicializar… En progreso: %1$d%% @@ -640,7 +640,7 @@ Bloquee a súa base de datos rapidamente. Pode configurar a aplicación para bloqueala despois dun tempo ou cando a pantalla se apague. Ordenación de elementos Escolla as entradas e grupos a ordenar. - Esta funcionalidade está en desenvolvemento e precisa da súa contribución para a súa futura dispoñibilidade. + Esta funcionalidade está <strong>en desenvolvemento</strong> e precisa da súa <strong>contribución</strong> para a súa futura dispoñibilidade. Moitas grazas pola súa contribución. Lembre manter a súa aplicación actualizada, instalando as novas versións. Contribuír @@ -656,11 +656,11 @@ Cancelado! Xere un contrasinal forte a asociar coa súa entrada, defínao facilmente segundo os criterios do formulario e non esqueza tornalo seguro. Suba un anexo á súa entrada para gardar datos externos importantes. - Ao contrario de moitas aplicacións de xestión de contrasinais, esta aplicación non ten anuncios, é un programa de software libre \"copyleft\" e non recolle datos persoais para os seus servidores, sen importar a versión a usar. + Ao contrario de moitas aplicacións de xestión de contrasinais, esta aplicación <strong>non ten anuncios</strong>, é <strong>un programa de software libre \"copyleft\"</strong> e non recolle datos persoais para os seus servidores, sen importar a versión a usar. Edite a entrada cos campos personalizados. Os conxuntos de datos poden ser referenciados en entradas diferentes. Considerar caracteres Personalizado Cambiar o paquete de iconos da aplicación - Ao comprar a versión pro, - está a incentivar os programadores a crear novas funcionalidades e a corrixir erros reportados. + Ao comprar a versión <strong>pro</strong>, + está a incentivar os programadores a crear <strong>novas funcionalidades</strong> e a <strong>corrixir erros</strong> reportados. \ No newline at end of file diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 274575cbc..a032d8436 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -329,7 +329,7 @@ 앱 속성을 내보내던 중 오류 발생 변환 차수 키 파생 함수에 사용되는 병렬 처리 수준 (즉, 스레드의 갯수) - 사용자 데이터를 받아오지 않습니다. 어떤 서버에도 연결하지 않고 로컬로만 동작하며 사용자의 사생활(프라이버시)를 최우선시합니다. + <strong>사용자 데이터를 받아오지 않습니다.</strong> 어떤 서버에도 연결하지 않고 로컬로만 동작하며 사용자의 사생활(프라이버시)를 최우선시합니다. 목록 재구축을 알맞게 할 수 없습니다. 업로드하려는 파일이 너무 큽니다. 요청한 시도로부터 응답을 받을 수 없습니다. diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 017c7855d..7a8121f1b 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -219,8 +219,8 @@ Įrašo pavadinimas jau egzistuoja. Duomenų bazės URI nepavyko gauti. Rakto išvedimo funkcija - KeePassDX © %1$d Kunzisoft yra atviro kodo ir be reklamų. -\nJis teikiamas toks, koks yra, pagal GPLv3 licenciją, be jokių garantijų. + KeePassDX © %1$d Kunzisoft yra <strong>atviro kodo</strong> ir <strong>be reklamų</strong>. +\nJis teikiamas toks, koks yra, pagal <strong>GPLv3</strong> licenciją, be jokių garantijų. Privatus raktas Išdavimo data El. pašto adresas @@ -237,7 +237,7 @@ Vienkartinio slaptažodžio info Failas, kurį bandote įkelti, yra per didelis. Ši forma neatpažįsta esamo OTP tipo, jos patvirtinimas gali nebegeneruoti teisingo žetono. - Jokie naudotojo duomenys nerenkami, ši programa neprisijungia prie jokio serverio, veikia tik vietoje ir visiškai nepažeidžia naudotojų privatumo. + <strong>Jokie naudotojo duomenys nerenkami</strong>, ši programa neprisijungia prie jokio serverio, veikia tik vietoje ir visiškai nepažeidžia naudotojų privatumo. Debit / Kreditinė kortelė Turėtojas El. paštas diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index d8e00736e..c85cd745c 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -408,7 +408,7 @@ Ukryj wygasłe wpisy Wygasłe wpisy nie są wyświetlane Kontakt - Aby zachować naszą wolność, naprawiać błędy, dodawać funkcje i być zawsze aktywnym, liczymy na Twój wkład. + Aby <strong>zachować naszą wolność</strong>, <strong>naprawiać błędy</strong>, <strong>dodawać funkcje</strong> i <strong> być zawsze aktywnym</strong>, liczymy na Twój <strong>wkład</strong>. Szybkie wyszukiwanie Wyszukiwanie po otwarciu bazy danych Zapamiętaj lokalizacje baz danych diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 28ce9f777..32822591f 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -601,7 +601,7 @@ Número de palavras da frase-chave À espera do pedido de desafio… À espera da resposta ao desafio… - Nenhum dado de utilizador é recuperado, esta aplicação não se liga a nenhum servidor, funciona apenas localmente e respeita plenamente a privacidade dos utilizadores. + <strong>Nenhum dado de utilizador é recuperado</strong>, esta aplicação não se liga a nenhum servidor, funciona apenas localmente e respeita plenamente a privacidade dos utilizadores. Etiquetas Filtros de pesquisa Wi-Fi diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 7e8833876..3d430b7e2 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -266,9 +266,9 @@ Участвуйте Примите участие в проекте для повышения стабильности, безопасности и добавления новых возможностей. В отличие от многих других приложений управления паролями, здесь <strong>нет рекламы</strong>, и оно <strong>свободно от лицензирования</strong>. Приложение не собирает ваши личные данные на своих серверах независимо от версии, которую вы используете. - Купите Pro–версию и откройте доступ к этой теме. Покупая Pro-версию, вы помогаете разработчикам открытого ПО. + Купите Pro–версию и откройте доступ к этой <strong>теме</strong>. Покупая Pro-версию, вы помогаете <strong>разработчикам открытого ПО</strong>. Эти <strong>визуальные стили</strong> доступны благодаря вашей щедрости. - Для развития нашего проекта и его независимости нам необходима ваша поддержка. + Для развития нашего проекта и его независимости нам необходима ваша <strong>поддержка</strong>. Эта функция находится <strong>в разработке</strong> и требует вашего <strong>участия</strong>, чтобы стать доступной в ближайшее время. Покупая <strong>Pro</strong>–версию, <strong>Участвуя в проекте</strong>, From eb51f6712b5f495ec1adcc568314a4f9d5759e75 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Sun, 22 Jan 2023 21:12:43 +0100 Subject: [PATCH 43/49] fix: changelog length --- fastlane/metadata/android/fr-FR/changelogs/117.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fastlane/metadata/android/fr-FR/changelogs/117.txt b/fastlane/metadata/android/fr-FR/changelogs/117.txt index cca13d5f1..66d16c79d 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/117.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/117.txt @@ -1,8 +1,8 @@ * Support du YubiKey challenge-response #8 #137 - * Meilleure gestion des exceptions durant une sauvegarde #1346 + * Meilleure gestion des exceptions de sauvegarde #1346 * Ajout du "Mode Capture d'Ecran" dans les paramètres #459 #1377 #1354 (Thx @GianpaMX) - * Masquage du texte sensible dans le presse-papiers #1386 + * Masquage du texte sensible du presse-papiers #1386 * Correction du bouton des pièces jointes #1401 * Ajout de l'icone monochrome #1403 #1404 (Thx @Sandelinos) - * Correction du verrouillage avec le bouton arrière #1412 #1414 (Thx @ryg-git) + * Correction du verrouillage avec bouton arrière #1412 #1414 (Thx @ryg-git) * Compatibilité de Vanadium #1447 (Thx @flawedworld) From a6cd02d146749cf1971c6b09897ad4cfaddfa79e Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Sun, 22 Jan 2023 21:30:37 +0100 Subject: [PATCH 44/49] feat: new year --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5edb83d4f..b1d70da7b 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ Other questions? You can read the [FAQ](https://github.com/Kunzisoft/KeePassDX/w ## License - Copyright © 2022 Jeremy Jamet / [Kunzisoft](https://www.kunzisoft.com). + Copyright © 2023 Jeremy Jamet / [Kunzisoft](https://www.kunzisoft.com). This file is part of KeePassDX. From e985bd2a20b23bbdf5865bb5060ab020c8efbd64 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Thu, 26 Jan 2023 22:29:01 +0100 Subject: [PATCH 45/49] fix: dialog to download driver --- app/src/main/AndroidManifest.xml | 3 +- .../activities/legacy/DatabaseActivity.kt | 6 +++- .../database/action/DatabaseTaskProvider.kt | 9 ++++-- .../keepass/hardware/HardwareKeyActivity.kt | 30 ++++++++++++++----- app/src/main/res/values/styles.xml | 2 +- 5 files changed, 37 insertions(+), 13 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9a7f47446..f7ab6482b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -157,7 +157,8 @@ + android:name="com.kunzisoft.keepass.hardware.HardwareKeyActivity" + android:theme="@style/Theme.Transparent" /> val databaseWasReloaded = database?.wasReloaded == true @@ -36,6 +36,10 @@ abstract class DatabaseActivity: StylishActivity(), DatabaseRetrieval { } } + protected open fun showDatabaseDialog(): Boolean { + return true + } + override fun onDestroy() { mDatabaseTaskProvider?.destroy() mDatabaseTaskProvider = null diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/DatabaseTaskProvider.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/DatabaseTaskProvider.kt index 76cd48e4e..ebf10bb03 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/DatabaseTaskProvider.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/DatabaseTaskProvider.kt @@ -90,7 +90,8 @@ import java.util.* * Utility class to connect an activity or a service to the DatabaseTaskNotificationService, * Useful to retrieve a database instance and sending tasks commands */ -class DatabaseTaskProvider(private var context: Context) { +class DatabaseTaskProvider(private var context: Context, + private var showDialog: Boolean = true) { // To show dialog only if context is an activity private var activity: FragmentActivity? = try { context as? FragmentActivity? } @@ -129,12 +130,14 @@ class DatabaseTaskProvider(private var context: Context) { private val actionTaskListener = object: DatabaseTaskNotificationService.ActionTaskListener { override fun onStartAction(database: Database, progressMessage: ProgressMessage) { - startDialog(progressMessage) + if (showDialog) + startDialog(progressMessage) } override fun onUpdateAction(database: Database, progressMessage: ProgressMessage) { - updateDialog(progressMessage) + if (showDialog) + updateDialog(progressMessage) } override fun onStopAction(database: Database, diff --git a/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt b/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt index 1965ce004..40540aed5 100644 --- a/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/hardware/HardwareKeyActivity.kt @@ -2,6 +2,7 @@ package com.kunzisoft.keepass.hardware import android.app.Activity import android.content.Context +import android.content.DialogInterface import android.content.Intent import android.content.Intent.FLAG_ACTIVITY_NEW_TASK import android.util.Log @@ -39,13 +40,23 @@ class HardwareKeyActivity: DatabaseModeActivity(){ resultCallback ) + override fun applyCustomStyle(): Boolean { + return false + } + + override fun showDatabaseDialog(): Boolean { + return false + } + override fun onDatabaseRetrieved(database: Database?) { super.onDatabaseRetrieved(database) val hardwareKey = HardwareKey.getHardwareKeyFromString( intent.getStringExtra(DATA_HARDWARE_KEY) ) - if (isHardwareKeyAvailable(this, hardwareKey)) { + if (isHardwareKeyAvailable(this, hardwareKey, true) { + mDatabaseTaskProvider?.startChallengeResponded(ByteArray(0)) + }) { when (hardwareKey) { /* HardwareKey.FIDO2_SECRET -> { @@ -60,8 +71,6 @@ class HardwareKeyActivity: DatabaseModeActivity(){ finish() } } - } else { - finish() } } @@ -106,7 +115,8 @@ class HardwareKeyActivity: DatabaseModeActivity(){ fun isHardwareKeyAvailable( context: Context, hardwareKey: HardwareKey?, - showDialog: Boolean = true + showDialog: Boolean = true, + onDialogDismissed: DialogInterface.OnDismissListener? = null ): Boolean { if (hardwareKey == null) return false @@ -125,8 +135,12 @@ class HardwareKeyActivity: DatabaseModeActivity(){ val yubikeyDriverAvailable = Intent(YUBIKEY_CHALLENGE_RESPONSE_INTENT) .resolveActivity(context.packageManager) != null - if (showDialog && !yubikeyDriverAvailable) - showHardwareKeyDriverNeeded(context, hardwareKey) + if (showDialog && !yubikeyDriverAvailable + && context is Activity) + showHardwareKeyDriverNeeded(context, hardwareKey) { + onDialogDismissed?.onDismiss(it) + context.finish() + } yubikeyDriverAvailable } } @@ -134,7 +148,8 @@ class HardwareKeyActivity: DatabaseModeActivity(){ private fun showHardwareKeyDriverNeeded( context: Context, - hardwareKey: HardwareKey + hardwareKey: HardwareKey, + onDialogDismissed: DialogInterface.OnDismissListener ) { val builder = AlertDialog.Builder(context) builder @@ -145,6 +160,7 @@ class HardwareKeyActivity: DatabaseModeActivity(){ UriUtil.openExternalApp(context, context.getString(R.string.key_driver_app_id)) } .setNegativeButton(android.R.string.cancel) { _, _ -> } + .setOnDismissListener(onDialogDismissed) builder.create().show() } } diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 8e0ab3909..7c3df40ed 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -565,7 +565,7 @@ -