improve ui and translations, separate export form sending

This commit is contained in:
marlon-erler
2026-08-29 23:31:51 +02:00
parent 784ff61794
commit 9deb365d3d
6 changed files with 999 additions and 452 deletions
+23 -14
View File
@@ -82,18 +82,24 @@ export default class FileTransferModel {
this.handleDecryptedFile(decrypted);
};
readonly handleBackupFile = async (encryptedBackup: string, passphrase: string): Promise<void> => {
const decrypted: string = await decryptString(encryptedBackup, passphrase);
const parsed = parse(decrypted);
if (!Array.isArray(parsed)) {
console.error("Canceling backup - not an array", decrypted);
return;
}
readonly handleBackupFile = async (
encryptedBackup: string,
passphrase: string,
): Promise<void> => {
const decrypted: string = await decryptString(
encryptedBackup,
passphrase,
);
const parsed = parse(decrypted);
if (!Array.isArray(parsed)) {
console.error("Canceling backup - not an array", decrypted);
return;
}
for (const file of parsed) {
this.handleDecryptedFile(file);
}
}
for (const file of parsed) {
this.handleDecryptedFile(file);
}
};
readonly handleDecryptedFile = (data: string): void => {
const parsed: any = parse(data);
@@ -130,7 +136,10 @@ export default class FileTransferModel {
}
};
readonly generateBackup = async (directoryPaths: IteratorObject<string[]>, passphrase: string): Promise<string> => {
readonly generateBackup = async (
directoryPaths: IteratorObject<string[]>,
passphrase: string,
): Promise<string> => {
const files: string[] = [];
for (const directoryPath of directoryPaths) {
this.storageModel.recurse(directoryPath, (filePath: string[]) => {
@@ -139,8 +148,8 @@ export default class FileTransferModel {
files.push(stringifiedFileData);
});
}
const rawBackup = stringify(files);
return await encryptString(rawBackup, passphrase);
const rawBackup = stringify(files);
return await encryptString(rawBackup, passphrase);
};
readonly prepareFileForSending = (filePath: string[]): string => {
+77 -13
View File
@@ -26,6 +26,7 @@ export function DataTransferModalWrapper(
{TransferDisplayModal(coreViewModel, fileTransferViewModel)}
{TransferDataInputModal(coreViewModel, fileTransferViewModel)}
{DataReceptionModal(coreViewModel, fileTransferViewModel)}
{ImportModal(coreViewModel, fileTransferViewModel)}
</div>
);
}
@@ -107,20 +108,35 @@ function DirectionSelectionModal(
</b>
</div>
<span class="icon">arrow_forward</span>
</button>
</button>
<hr></hr>
<button
class="tile"
on:click={
fileTransferViewModel.showTransferDataInputModal
}
on:click={fileTransferViewModel.showImportModal}
>
<span class="icon">file_open</span>
<span class="icon">file_save</span>
<div>
<b>
{
coreViewModel.translations
.dataTransferModal
.importButton
.dataTransferModal.exportButton
}
</b>
</div>
<span class="icon">arrow_forward</span>
</button>
<button
class="tile"
on:click={fileTransferViewModel.showImportModal}
>
<span class="icon">upload_file</span>
<div>
<b>
{
coreViewModel.translations
.dataTransferModal.importButton
}
</b>
</div>
@@ -196,7 +212,7 @@ function FileSelectionModal(
<h2>
{
coreViewModel.translations.dataTransferModal
.transferDataHeadline
.sendHeadline
}
</h2>
<span class="secondary">
@@ -279,7 +295,7 @@ function TransferDataDisplayModal(
<h2>
{
coreViewModel.translations.dataTransferModal
.transferDataHeadline
.sendHeadline
}
</h2>
@@ -327,7 +343,7 @@ function TransferDataDisplayModal(
></b>
</div>
</div>
</div>
</div>
</main>
<div class="flex-row width-100">
<button
@@ -337,7 +353,7 @@ function TransferDataDisplayModal(
{coreViewModel.translations.general.backButton}
</button>
<button disabled class="flex">
{coreViewModel.translations.general.waitingLabel}
{coreViewModel.translations.general.waitingLabel}
</button>
</div>
</div>
@@ -441,7 +457,7 @@ function TransferDataInputModal(
<h2>
{
coreViewModel.translations.dataTransferModal
.transferDataHeadline
.receiveHeadline
}
</h2>
@@ -540,7 +556,55 @@ function DataReceptionModal(
<h2>
{
coreViewModel.translations.dataTransferModal
.transferDataHeadline
.receiveHeadline
}
</h2>
<p
class="secondary"
subscribe:innerText={
fileTransferViewModel.filesReceivedText
}
></p>
<hr></hr>
<div
class="tile flex-column align-start"
children:append={[
fileTransferViewModel.filePathsReceived,
StringToTextSpan,
]}
></div>
</main>
<button on:click={ViewController.reload}>
{coreViewModel.translations.general.reloadAppButton}
<span class="icon">refresh</span>
</button>
</div>
</div>
);
}
function ImportModal(
coreViewModel: CoreViewModel,
fileTransferViewModel: FileTransferViewModel,
) {
const isPresented = React.createProxyState(
[fileTransferViewModel.presentedModal],
() =>
fileTransferViewModel.presentedModal.value ==
FileTransferModals.ImportModal,
);
return (
<div class="modal" toggle:open={isPresented}>
<div>
<main>
<h2>
{
coreViewModel.translations.dataTransferModal
.importHeadline
}
</h2>
+394 -379
View File
@@ -104,6 +104,10 @@ const englishTranslations = {
dataTransferModal: {
transferDataHeadline: "Data Transfer",
sendHeadline: "Transfer to other device",
receiveHeadline: "Transfer to This Device",
exportHeadline: "Export Data",
importHeadline: "Import Data",
selectionDescription: "Select the data that you want to transfer.",
dataEntryDescription: "Enter this data on the other device.",
dataEntryInputDescription:
@@ -113,8 +117,9 @@ const englishTranslations = {
///
fromThisDeviceButton: "Export or send from this device",
toThisDeviceButton: "Receive from other device",
fromThisDeviceButton: "Send to other device",
toThisDeviceButton: "Send to this device",
exportButton: "Export to file",
importButton: "Import from file",
///
@@ -416,472 +421,482 @@ export const allTranslations: {
dataTransferModal: {
transferDataHeadline: "Datenübertragung",
selectionDescription:
"Wähle die Daten aus, die du übertragen möchtest.",
dataEntryDescription:
"Gib diese Informationen auf dem anderen Gerät ein.",
dataEntryInputDescription:
"Gib die auf dem anderen Gerät angezeigten Informationen ein.",
sendHeadline: "An anderes Gerät senden",
receiveHeadline: "An dieses Gerät senden",
exportHeadline: "Daten exportieren",
importHeadline: "Daten importieren",
selectionDescription:
"Wähle die Daten aus, die du übertragen möchtest.",
dataEntryDescription:
"Gib diese Informationen auf dem anderen Gerät ein.",
dataEntryInputDescription:
"Gib die auf dem anderen Gerät angezeigten Informationen ein.",
notConnectedError: "Du bist mit keinem Server verbunden.",
notConnectedError: "Du bist mit keinem Server verbunden.",
fromThisDeviceButton: "Exportieren oder an anderes Gerät senden",
toThisDeviceButton: "An dieses Gerät senden",
importButton: "Aus Datei importieren",
fromThisDeviceButton: "An anderes Gerät senden",
toThisDeviceButton: "An dieses Gerät senden",
exportButton: "Als Datei exportieren",
importButton: "Aus Datei importieren",
generalHeadline: "Allgemein",
generalHeadline: "Allgemein",
connectionData: "Verbindungsdaten",
settingsData: "Einstellungen",
connectionData: "Verbindungsdaten",
settingsData: "Einstellungen",
chatsHeadline: "Chats",
chatsHeadline: "Chats",
transferChannelHeadline: "Übertragungskanal",
transferKeyHeadline: "Schlüssel",
transferChannelHeadline: "Übertragungskanal",
transferKeyHeadline: "Schlüssel",
sendButton: "Senden",
sendAgainButton: "Erneut senden",
sendButton: "Senden",
sendAgainButton: "Erneut senden",
filesSentCount: (count) => `Dateien gesendet: ${count}.`,
allFilesSent: "Fertig.",
filesSentCount: (count) => `Dateien gesendet: ${count}.`,
allFilesSent: "Fertig.",
filesReceivedCount: (count) => `Dateien empfangen: ${count}.`,
},
filesReceivedCount: (count) => `Dateien empfangen: ${count}.`,
},
storage: {
noItemSelected: "Kein Element ausgewählt",
notAFile: "(keine Datei)",
contentEmpty: "(leer)",
storage: {
noItemSelected: "Kein Element ausgewählt",
notAFile: "(keine Datei)",
contentEmpty: "(leer)",
path: "Pfad",
content: "Inhalt",
path: "Pfad",
content: "Inhalt",
deleteItem: "Element löschen",
deleteItem: "Element löschen",
removeJunkButton: "Datenmüll löschen",
},
removeJunkButton: "Datenmüll löschen",
},
chatPage: {
closeChatAudioLabe: "Chat schließen",
chatSettingsAudioLabel: "Chateinstellungen",
chatPage: {
closeChatAudioLabe: "Chat schließen",
chatSettingsAudioLabel: "Chateinstellungen",
pages: {
settings: "Einstellungen",
messages: "Nachrichten",
tasks: "Aufgaben",
calendar: "Kalender",
},
pages: {
settings: "Einstellungen",
messages: "Nachrichten",
tasks: "Aufgaben",
calendar: "Kalender",
},
settings: {
settingsHeadline: "Einstellungen",
settings: {
settingsHeadline: "Einstellungen",
primaryChannelLabel: "Hauptkanal",
setPrimaryChannelButtonAudioLabel: "Hauptkanal festlegen",
primaryChannelLabel: "Hauptkanal",
setPrimaryChannelButtonAudioLabel: "Hauptkanal festlegen",
namespaceLabel: "Namensraum",
namespacePlaceholder: "Ohne Namensraum",
setNamespaceButtonAudioLabel: "Namensraum festlegen",
namespaceLabel: "Namensraum",
namespacePlaceholder: "Ohne Namensraum",
setNamespaceButtonAudioLabel: "Namensraum festlegen",
newSecondaryChannelPlaceholder: "Sekundären Kanal hinzufügen",
newSecondaryChannelAudioLabel:
"Name des neuen sekundären Kanals",
addSecondaryChannelButtonAudioLabel:
"Sekundären Kanal hinzufügen",
newSecondaryChannelPlaceholder: "Sekundären Kanal hinzufügen",
newSecondaryChannelAudioLabel:
"Name des neuen sekundären Kanals",
addSecondaryChannelButtonAudioLabel:
"Sekundären Kanal hinzufügen",
encryptionKeyLabel: "Schlüssel",
setEncryptionKeyButtonAudioLabel: "Schlüssel festlegen",
showEncryptionKey: "Schlüssel anzeigen",
encryptionKeyLabel: "Schlüssel",
setEncryptionKeyButtonAudioLabel: "Schlüssel festlegen",
showEncryptionKey: "Schlüssel anzeigen",
deleteChatButton: "Gesamten Chat löschen",
},
deleteChatButton: "Gesamten Chat löschen",
},
message: {
messagesHeadline: "Nachrichten",
message: {
messagesHeadline: "Nachrichten",
messageFilterHeadline: "Nachrichten filtern",
messageFilterReactionsHadline: "Reaktionen",
messageFilterAllReactionsButton: "Alle anzeigen",
messageFilterHeadline: "Nachrichten filtern",
messageFilterReactionsHadline: "Reaktionen",
messageFilterAllReactionsButton: "Alle anzeigen",
composerInputPlaceholder: "Schreib eine Nachricht...",
sendMessageButtonAudioLabel: "nachricht senden",
filterMessagesButtonAudioLabel: "nachrichten filtern",
composerInputPlaceholder: "Schreib eine Nachricht...",
sendMessageButtonAudioLabel: "nachricht senden",
filterMessagesButtonAudioLabel: "nachrichten filtern",
showMessageInfoButtonAudioLabel: "nachrichteninfo anzeigen",
messageInfoHeadline: "Nachrichteninfo",
cancelReplyAudioLabel: "antwort abbrechen",
showMessageInfoButtonAudioLabel: "nachrichteninfo anzeigen",
messageInfoHeadline: "Nachrichteninfo",
cancelReplyAudioLabel: "antwort abbrechen",
sentBy: "Gesendet von",
timeSent: "Sendezeit",
channel: "Kanal",
messageContent: "Nachrichteninhalt",
sentBy: "Gesendet von",
timeSent: "Sendezeit",
channel: "Kanal",
messageContent: "Nachrichteninhalt",
copyMessageButton: "Nachricht kopieren",
resendMessageButton: "Nachricht erneut senden",
decryptMessageButton: "Nachricht entschlüsseln",
replyToMessageButton: "Auf Nachricht antworten",
deleteMessageButton: "Nachricht löschen",
copyMessageButton: "Nachricht kopieren",
resendMessageButton: "Nachricht erneut senden",
decryptMessageButton: "Nachricht entschlüsseln",
replyToMessageButton: "Auf Nachricht antworten",
deleteMessageButton: "Nachricht löschen",
//
//
thumbsUpReaction: "Reaktion: Daumen hoch",
checkReaction: "Reaktion: Haken",
stopReaction: "Reaktion: Stopp",
attentionReaction: "Reaktion: Ausrufezeichen",
doubleAttentionReaction: "Reaktion: doppeltes Ausrufezeichen",
questionReaction: "Reaktion: Fragezeichen",
},
thumbsUpReaction: "Reaktion: Daumen hoch",
checkReaction: "Reaktion: Haken",
stopReaction: "Reaktion: Stopp",
attentionReaction: "Reaktion: Ausrufezeichen",
doubleAttentionReaction: "Reaktion: doppeltes Ausrufezeichen",
questionReaction: "Reaktion: Fragezeichen",
},
task: {
newBoardNamePlaceholder: "Board erstellen",
createBoardButtonAudioLabel: "board erstellen",
task: {
newBoardNamePlaceholder: "Board erstellen",
createBoardButtonAudioLabel: "board erstellen",
noBoardSelected: "Kein Board ausgewählt",
boardNotFound: "Board nicht gefunden",
noBoardSelected: "Kein Board ausgewählt",
boardNotFound: "Board nicht gefunden",
closeBoardButtonAudioLabel: "board schließen",
toggleBoardButtonAudioLabel: "board-liste ein/ausblenden",
showBoardSettingsButtonAudioLabel:
"Board-Einstellungen anzeigen",
closeBoardButtonAudioLabel: "board schließen",
toggleBoardButtonAudioLabel: "board-liste ein/ausblenden",
showBoardSettingsButtonAudioLabel:
"Board-Einstellungen anzeigen",
listViewButtonAudioLabel: "Listenansicht",
kanbanViewButtonAudioLabel: "Kanban-Ansicht",
statusViewButtonAudioLabel: "Statusrasteransicht",
listViewButtonAudioLabel: "Listenansicht",
kanbanViewButtonAudioLabel: "Kanban-Ansicht",
statusViewButtonAudioLabel: "Statusrasteransicht",
filterTasksButtonAudioLabel: "Aufgaben filtern",
createTaskButtonAudioLabel: "Neue Aufgabe erstellen",
filterTasksButtonAudioLabel: "Aufgaben filtern",
createTaskButtonAudioLabel: "Neue Aufgabe erstellen",
boardSettingsHeadline: "Board-Einstellungen",
boardNameInputLabel: "Boardname",
deleteBoardButton: "Board und alle Aufgaben löschen",
boardSettingsHeadline: "Board-Einstellungen",
boardNameInputLabel: "Boardname",
deleteBoardButton: "Board und alle Aufgaben löschen",
taskSettingsHeadline: "Aufgabe bearbeiten",
taskSettingsHeadline: "Aufgabe bearbeiten",
taskNameLabel: "Titel",
taskBoardLabel: "Board",
taskNameLabel: "Titel",
taskBoardLabel: "Board",
taskCategoryLabel: "Kategorie",
taskStatusLabel: "Status",
taskPriorityLabel: "Priorität",
taskCategoryLabel: "Kategorie",
taskStatusLabel: "Status",
taskPriorityLabel: "Priorität",
taskDescriptionLabel: "Beschreibung",
taskDescriptionLabel: "Beschreibung",
taskDateLabel: "Datum",
taskTimeLabel: "Uhrzeit",
taskDateLabel: "Datum",
taskTimeLabel: "Uhrzeit",
deleteTaskButton: "Aufgabe löschen",
deleteTaskButton: "Aufgabe löschen",
filterTasksHeadline: "Aufgaben filtern",
filterTasksHeadline: "Aufgaben filtern",
renameCategoryInputPlaceholder: "Kategorie umbenennen",
renameStatusInputPlaceholder: "Status umbenennen",
},
renameCategoryInputPlaceholder: "Kategorie umbenennen",
renameStatusInputPlaceholder: "Status umbenennen",
},
calendar: {
eventsBoard: "Ereignisse",
calendar: {
eventsBoard: "Ereignisse",
///
///
todayButtonAudioLabel: "gehe zu heute",
todayButtonAudioLabel: "gehe zu heute",
previousMonthButtonAudioLabel: "vorheriger monat",
nextMonthButtonAudioLabel: "nächster monat",
previousMonthButtonAudioLabel: "vorheriger monat",
nextMonthButtonAudioLabel: "nächster monat",
yearInputAudioLabel: "Jahr",
monthInputAudioLabel: "Monat",
yearInputAudioLabel: "Jahr",
monthInputAudioLabel: "Monat",
yearInputPlaceholder: "2000",
monthInputPlaceholder: "01",
yearInputPlaceholder: "2000",
monthInputPlaceholder: "01",
searchEventsHeadline: "Ereignisse suchen",
searchEventsHeadline: "Ereignisse suchen",
events: "Ereignisse",
noEvents: "Keine Ereignisse",
},
},
events: "Ereignisse",
noEvents: "Keine Ereignisse",
},
},
},
es: {
updater: {
migrated: "Migrado",
},
general: {
deleteItemButtonAudioLabel: "eliminar elemento",
searchButtonAudioLabel: "buscar",
abortButton: "Abortar",
cancelButton: "Cancelar",
closeButton: "Cerrar",
backButton: "Atrás",
continueButton: "Continuar",
confirmButton: "Confirmar",
saveButton: "Guardar",
setButton: "OK",
reloadAppButton: "Recargar app",
fileVersionLabel: "Versión",
searchLabel: "Buscar",
waitingLabel: "Esperando...",
restoreConnection: "Conectar de nuevo",
noPageSelected: "No página seleccionada",
},
regional: {
weekdays: {
full: [
"Domingo",
"Lunes",
"Martes",
"Miércoles",
"Jueves",
"Viernes",
"Sábado",
],
abbreviated: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"],
},
},
homePage: {
appName: "Comms",
updater: {
migrated: "Migrado",
},
general: {
deleteItemButtonAudioLabel: "eliminar elemento",
searchButtonAudioLabel: "buscar",
abortButton: "Abortar",
cancelButton: "Cancelar",
closeButton: "Cerrar",
backButton: "Atrás",
continueButton: "Continuar",
confirmButton: "Confirmar",
saveButton: "Guardar",
setButton: "OK",
reloadAppButton: "Recargar app",
fileVersionLabel: "Versión",
searchLabel: "Buscar",
waitingLabel: "Esperando...",
restoreConnection: "Conectar de nuevo",
noPageSelected: "No página seleccionada",
},
regional: {
weekdays: {
full: [
"Domingo",
"Lunes",
"Martes",
"Miércoles",
"Jueves",
"Viernes",
"Sábado",
],
abbreviated: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"],
},
},
homePage: {
appName: "Comms",
overviewHeadline: "Resumen",
serverAddress: "Dirección del servidor",
serverAddressPlaceholder: "wss://192.168.0.69:3000",
connectAudioLabel: "conectar al servidor",
disconnectAudioLabel: "desconectar del servidor",
manageConnectionsAudioLabel: "gestionar conexiones",
yourNameLabel: "Tu nombre",
yourNamePlaceholder: "Juan Pérez",
setNameButtonAudioLabel: "establecer nombre",
settingsButton: "Ajustes",
manageStorageButton: "Gestionar almacenamiento",
transferDataButton: "Enviar o exportar archivos",
scrollToChatButton: "Chats",
backToOverviewAudioLabel: "volver al resumen",
chatsHeadline: "Chats",
addChatAudioLabel: "nombre del nuevo chat",
addChatPlaceholder: "Añadir chat",
addChatButton: "Añadir chat",
},
settings: {
pages: {
appearance: "Aspecto",
regional: "Idioma y Región",
info: "Sobre Comms",
},
themes: {
dark: "Oscuro",
light: "Claro",
system: "Según dispositivo",
},
version: "Versión",
language: "Idioma",
firstDayOfWeekLabel: "Primer día de la semana",
},
connectionModal: {
connectionModalHeadline: "Gestionar Conexiones",
connectButtonAudioLabel: "conectar",
},
dataTransferModal: {
transferDataHeadline: "Transferencia de datos",
sendHeadline: "Enviar a otro dispositivo",
receiveHeadline: "Enviar a este dispositivo",
exportHeadline: "Exportar archivo",
importHeadline: "Importar archivo",
selectionDescription:
"Selecciona los datos que quieres transferir.",
dataEntryDescription:
"Introduce estos datos en el otro dispositivo.",
dataEntryInputDescription:
"Introduce los datos mostrados en el otro dispositivo.",
notConnectedError: "No estás conectado a ningún servidor.",
fromThisDeviceButton: "Enviar a otro dispositivo",
toThisDeviceButton: "Enviar a este dispositivo",
exportButton: "Exportar archivo",
importButton: "Importar archivo",
generalHeadline: "General",
connectionData: "Datos de Conexión",
settingsData: "Datos de Configuración",
chatsHeadline: "Chats",
transferChannelHeadline: "Canal de Transferencia",
transferKeyHeadline: "Clave de Encriptación de Transferencia",
sendButton: "Enviar",
sendAgainButton: "Enviar otra vez",
filesSentCount: (count) => `Archivos enviados: ${count}.`,
allFilesSent: "Hecho.",
filesReceivedCount: (count) => `Archivos recibidos: ${count}.`,
},
storage: {
noItemSelected: "Ningún elemento seleccionado",
notAFile: "(no es un archivo)",
contentEmpty: "(vacío)",
path: "Ruta",
content: "Contenido",
deleteItem: "Eliminar elemento",
removeJunkButton: "Eliminar archivos basura",
},
chatPage: {
closeChatAudioLabe: "cerrar chat",
chatSettingsAudioLabel: "configuración del chat",
pages: {
settings: "Configuración",
messages: "Mensajes",
tasks: "Tareas",
calendar: "Calendario",
},
overviewHeadline: "Resumen",
serverAddress: "Dirección del servidor",
serverAddressPlaceholder: "wss://192.168.0.69:3000",
connectAudioLabel: "conectar al servidor",
disconnectAudioLabel: "desconectar del servidor",
manageConnectionsAudioLabel: "gestionar conexiones",
yourNameLabel: "Tu nombre",
yourNamePlaceholder: "Juan Pérez",
setNameButtonAudioLabel: "establecer nombre",
settingsButton: "Ajustes",
manageStorageButton: "Gestionar almacenamiento",
transferDataButton: "Enviar o exportar archivos",
scrollToChatButton: "Chats",
backToOverviewAudioLabel: "volver al resumen",
chatsHeadline: "Chats",
addChatAudioLabel: "nombre del nuevo chat",
addChatPlaceholder: "Añadir chat",
addChatButton: "Añadir chat",
},
settings: {
pages: {
appearance: "Aspecto",
regional: "Idioma y Región",
info: "Sobre Comms",
},
themes: {
dark: "Oscuro",
light: "Claro",
system: "Según dispositivo",
},
version: "Versión",
language: "Idioma",
firstDayOfWeekLabel: "Primer día de la semana",
},
connectionModal: {
connectionModalHeadline: "Gestionar Conexiones",
connectButtonAudioLabel: "conectar",
},
dataTransferModal: {
transferDataHeadline: "Transferencia de Datos",
selectionDescription:
"Selecciona los datos que quieres transferir.",
dataEntryDescription:
"Introduce estos datos en el otro dispositivo.",
dataEntryInputDescription:
"Introduce los datos mostrados en el otro dispositivo.",
notConnectedError: "No estás conectado a ningún servidor.",
fromThisDeviceButton: "Exportar o enviar a otro dispositivo",
toThisDeviceButton: "Enviar a este dispositivo",
importButton: "Importar desde archivo",
generalHeadline: "General",
connectionData: "Datos de Conexión",
settingsData: "Datos de Configuración",
chatsHeadline: "Chats",
transferChannelHeadline: "Canal de Transferencia",
transferKeyHeadline: "Clave de Encriptación de Transferencia",
sendButton: "Enviar",
sendAgainButton: "Enviar otra vez",
filesSentCount: (count) => `Archivos enviados: ${count}.`,
allFilesSent: "Hecho.",
filesReceivedCount: (count) => `Archivos recibidos: ${count}.`,
},
storage: {
noItemSelected: "Ningún elemento seleccionado",
notAFile: "(no es un archivo)",
contentEmpty: "(vacío)",
path: "Ruta",
content: "Contenido",
deleteItem: "Eliminar elemento",
settings: {
settingsHeadline: "Configuración",
removeJunkButton: "Eliminar archivos basura",
},
primaryChannelLabel: "Canal principal",
setPrimaryChannelButtonAudioLabel: "establecer canal principal",
chatPage: {
closeChatAudioLabe: "cerrar chat",
chatSettingsAudioLabel: "configuración del chat",
namespaceLabel: "Espacio de nombres",
namespacePlaceholder: "Sin espacio de nombres",
setNamespaceButtonAudioLabel: "establecer espacio de nombres",
pages: {
settings: "Configuración",
messages: "Mensajes",
tasks: "Tareas",
calendar: "Calendario",
},
newSecondaryChannelPlaceholder: "Añadir canal secundario",
newSecondaryChannelAudioLabel:
"nombre del nuevo canal secundario",
addSecondaryChannelButtonAudioLabel: "añadir canal secundario",
settings: {
settingsHeadline: "Configuración",
encryptionKeyLabel: "Clave de encriptación",
setEncryptionKeyButtonAudioLabel:
"establecer clave de encriptación",
showEncryptionKey: "Mostrar clave de encriptación",
primaryChannelLabel: "Canal principal",
setPrimaryChannelButtonAudioLabel: "establecer canal principal",
deleteChatButton: "Eliminar todo el chat",
},
namespaceLabel: "Espacio de nombres",
namespacePlaceholder: "Sin espacio de nombres",
setNamespaceButtonAudioLabel: "establecer espacio de nombres",
message: {
messagesHeadline: "Mensajes",
newSecondaryChannelPlaceholder: "Añadir canal secundario",
newSecondaryChannelAudioLabel:
"nombre del nuevo canal secundario",
addSecondaryChannelButtonAudioLabel: "añadir canal secundario",
messageFilterHeadline: "Filtrar mensajes",
messageFilterReactionsHadline: "Reacciones",
messageFilterAllReactionsButton: "Mostrar todas",
encryptionKeyLabel: "Clave de encriptación",
setEncryptionKeyButtonAudioLabel:
"establecer clave de encriptación",
showEncryptionKey: "Mostrar clave de encriptación",
composerInputPlaceholder: "Escribe un mensaje...",
sendMessageButtonAudioLabel: "enviar mensaje",
filterMessagesButtonAudioLabel: "filtrar mensajes",
deleteChatButton: "Eliminar todo el chat",
},
showMessageInfoButtonAudioLabel:
"mostrar información del mensaje",
messageInfoHeadline: "Información del Mensaje",
cancelReplyAudioLabel: "abortar la respuesta",
message: {
messagesHeadline: "Mensajes",
sentBy: "Enviado por",
timeSent: "Hora de envío",
channel: "Canal",
messageContent: "Contenido del mensaje",
messageFilterHeadline: "Filtrar mensajes",
messageFilterReactionsHadline: "Reacciones",
messageFilterAllReactionsButton: "Mostrar todas",
copyMessageButton: "Copiar mensaje",
resendMessageButton: "Reenviar mensaje",
decryptMessageButton: "Desencriptar mensaje",
replyToMessageButton: "Responder al mensaje",
deleteMessageButton: "Eliminar mensaje",
composerInputPlaceholder: "Escribe un mensaje...",
sendMessageButtonAudioLabel: "enviar mensaje",
filterMessagesButtonAudioLabel: "filtrar mensajes",
//
showMessageInfoButtonAudioLabel:
"mostrar información del mensaje",
messageInfoHeadline: "Información del Mensaje",
cancelReplyAudioLabel: "abortar la respuesta",
thumbsUpReaction: "Reacción: pulgar hacia arriba",
checkReaction: "Reacción: marca de verificación",
stopReaction: "Reacción: signo de parada",
attentionReaction: "Reaccion: signo de atención",
doubleAttentionReaction: "Reaccion: signo de atención doble",
questionReaction: "Reaccion: signo de interrogación",
},
sentBy: "Enviado por",
timeSent: "Hora de envío",
channel: "Canal",
messageContent: "Contenido del mensaje",
task: {
newBoardNamePlaceholder: "Crear un tablero",
createBoardButtonAudioLabel: "crear tablero",
copyMessageButton: "Copiar mensaje",
resendMessageButton: "Reenviar mensaje",
decryptMessageButton: "Desencriptar mensaje",
replyToMessageButton: "Responder al mensaje",
deleteMessageButton: "Eliminar mensaje",
noBoardSelected: "Ningún tablero seleccionado",
boardNotFound: "Tablero no encontrado",
//
closeBoardButtonAudioLabel: "cerrar tablero",
toggleBoardButtonAudioLabel:
"mostrar o ocultar lista de tableros",
showBoardSettingsButtonAudioLabel:
"mostrar configuración del tablero",
thumbsUpReaction: "Reacción: pulgar hacia arriba",
checkReaction: "Reacción: marca de verificación",
stopReaction: "Reacción: signo de parada",
attentionReaction: "Reaccion: signo de atención",
doubleAttentionReaction: "Reaccion: signo de atención doble",
questionReaction: "Reaccion: signo de interrogación",
},
listViewButtonAudioLabel: "vista de lista",
kanbanViewButtonAudioLabel: "vista kanban",
statusViewButtonAudioLabel: "vista de cuadrícula de estado",
task: {
newBoardNamePlaceholder: "Crear un tablero",
createBoardButtonAudioLabel: "crear tablero",
filterTasksButtonAudioLabel: "filtrar tareas",
createTaskButtonAudioLabel: "crear nueva tarea",
noBoardSelected: "Ningún tablero seleccionado",
boardNotFound: "Tablero no encontrado",
boardSettingsHeadline: "Configuración del Tablero",
boardNameInputLabel: "Nombre del tablero",
deleteBoardButton: "Eliminar tablero y todas las tareas",
closeBoardButtonAudioLabel: "cerrar tablero",
toggleBoardButtonAudioLabel:
"mostrar o ocultar lista de tableros",
showBoardSettingsButtonAudioLabel:
"mostrar configuración del tablero",
taskSettingsHeadline: "Editar Tarea",
listViewButtonAudioLabel: "vista de lista",
kanbanViewButtonAudioLabel: "vista kanban",
statusViewButtonAudioLabel: "vista de cuadrícula de estado",
taskNameLabel: "Título",
taskBoardLabel: "Tablero",
filterTasksButtonAudioLabel: "filtrar tareas",
createTaskButtonAudioLabel: "crear nueva tarea",
taskCategoryLabel: "Categoría",
taskStatusLabel: "Estado",
taskPriorityLabel: "Prioridad",
boardSettingsHeadline: "Configuración del Tablero",
boardNameInputLabel: "Nombre del tablero",
deleteBoardButton: "Eliminar tablero y todas las tareas",
taskDescriptionLabel: "Descripción",
taskSettingsHeadline: "Editar Tarea",
taskDateLabel: "Fecha",
taskTimeLabel: "Hora",
taskNameLabel: "Título",
taskBoardLabel: "Tablero",
deleteTaskButton: "Eliminar tarea",
taskCategoryLabel: "Categoría",
taskStatusLabel: "Estado",
taskPriorityLabel: "Prioridad",
filterTasksHeadline: "Filtrar Tareas",
taskDescriptionLabel: "Descripción",
renameCategoryInputPlaceholder: "Renombrar categoría",
renameStatusInputPlaceholder: "Renombrar estado",
},
taskDateLabel: "Fecha",
taskTimeLabel: "Hora",
calendar: {
eventsBoard: "Eventos",
deleteTaskButton: "Eliminar tarea",
///
filterTasksHeadline: "Filtrar Tareas",
todayButtonAudioLabel: "ir a hoy",
renameCategoryInputPlaceholder: "Renombrar categoría",
renameStatusInputPlaceholder: "Renombrar estado",
},
previousMonthButtonAudioLabel: "mes anterior",
nextMonthButtonAudioLabel: "mes siguiente",
calendar: {
eventsBoard: "Eventos",
yearInputAudioLabel: "año",
monthInputAudioLabel: "mes",
///
yearInputPlaceholder: "2000",
monthInputPlaceholder: "01",
todayButtonAudioLabel: "ir a hoy",
searchEventsHeadline: "Buscar Eventos",
previousMonthButtonAudioLabel: "mes anterior",
nextMonthButtonAudioLabel: "mes siguiente",
yearInputAudioLabel: "año",
monthInputAudioLabel: "mes",
yearInputPlaceholder: "2000",
monthInputPlaceholder: "01",
searchEventsHeadline: "Buscar Eventos",
events: "Eventos",
noEvents: "No hay eventos",
},
},
events: "Eventos",
noEvents: "No hay eventos",
},
},
},
};
@@ -148,6 +148,10 @@ export default class FileTransferViewModel extends Context {
this.presentedModal.value = FileTransferModals.TransferDataInput;
};
showImportModal = (): void => {
this.presentedModal.value = FileTransferModals.ImportModal;
};
prepareReceivingData = (): void => {
if (this.cannotPrepareToReceive.value == true) return;
this.presentedModal.value = FileTransferModals.ReceptionDisplay;
@@ -204,4 +208,7 @@ export enum FileTransferModals {
// receiving
TransferDataInput,
ReceptionDisplay,
// import
ImportModal,
}