From 2c416d5150e705b9b80c2abda7ec7a1388d52e44 Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Wed, 6 Mar 2024 23:03:19 -0800 Subject: [PATCH] adding spanish translation --- net/web/src/constants/Strings.js | 180 ++++++++++++++++++ .../src/context/useSettingsContext.hook.js | 21 +- 2 files changed, 197 insertions(+), 4 deletions(-) diff --git a/net/web/src/constants/Strings.js b/net/web/src/constants/Strings.js index cab22a12..e740f3c0 100644 --- a/net/web/src/constants/Strings.js +++ b/net/web/src/constants/Strings.js @@ -360,3 +360,183 @@ export const fr = { camera: 'Caméra' }; +export const sp = { + code: 'sp', + settings: 'Configuración', + contacts: 'Contactos', + logout: 'Cerrar Sesión', + confirmLogout: '¿Estás seguro de que quieres cerrar sesión?', + contactsUpdated: 'Tus contactos han cambiado', + disconnected: 'Desconectado del servidor', + allDevices: 'Cerrar sesión en todos los dispositivos', + ok: 'Aceptar', + cancel: 'Cancelar', + + new: 'Nuevo', + newMessage: 'Nuevo mensaje', + topics: 'Temas', + unsetSealing: 'Clave de seguridad no definida', + newTopic: 'Nuevo tema', + + noContacts: 'Sin contactos', + noTopics: 'Sin temas', + noConnected: 'Ningún contacto conectado', + subjectOptional: 'Tema (opcional)', + members: 'Miembros', + sealedTopic: 'Tema Seguros', + start: 'Empezar', + + communication: 'Comunicación Para la Web Descentralizada', + setupProfile: 'Configura tu Perfil', + connectPeople: 'Conecta con Personas', + startConversation: 'Iniciar una conversación', + + default: 'Predeterminado', + dark: 'Oscuro', + light: 'Claro', + + operationFailed: 'Operación fallida', + tryAgain: 'Por favor, inténtalo de nuevo.', + + add: 'Agregar', + save: 'Guardar', + forget: 'Olvidar', + unlock: 'Desbloquear', + profile: 'Perfil', + application: 'Aplicación', + account: 'Cuenta', + name: 'Nombre', + node: 'Servidor', + location: 'Ubicación', + description: 'Descripción', + timeFormat: 'Formato de Hora', + dateFormat: 'Formato de Fecha', + theme: 'Tema', + language: 'Idioma', + timeUs: '12h', + timeEu: '24h', + dateUs: 'mm/dd', + dateEu: 'dd/mm', + registry: 'Visible en el Registro', + sealedTopics: 'Temas Seguros', + changeLogin: 'Cambiar Credenciales', + selectImage: 'Seleccionar', + profileImage: 'Imagen de Perfil', + profileDetails: 'Detalles del Perfil', + enableSealed: 'Activar Temas Seguros', + password: 'Contraseña', + newPassword: 'Nueva Contraseña', + confirmPassword: 'Confirmar Contraseña', + deleteKey: 'Escribe \'borrar\' para Eliminar la Clave', + delete: 'borrar', + remove: 'Eliminar', + username: 'Nombre de usuario', + updateProfile: 'Actualizar perfil', + + syncError: 'Error de sincronización', + callTip: 'Llamar al contacto', + messageTip: 'Enviar mensaje al contacto', + connectedTip: 'Contacto conectado', + requestedTip: 'Solicitud de conexión enviada por el contacto', + connectingTip: 'Conexión en curso', + pendingTip: 'Solicitud de conexión enviada por un contacto desconocido', + confirmedTip: 'Contacto desconectado', + unsavedTip: 'Contacto desconocido', + + actions: 'Acciones', + resync: 'Resincronizar', + connect: 'Conectar', + disconnect: 'Desconectar', + disconnectContact: 'Desconectar al Contacto', + deleteContact: 'Eliminar Contacto', + saveContact: 'Guardar Contacto', + saveAccept: 'Guardar y Aceptar la Conexión', + saveRequest: 'Guardar y solicitar la Conexión', + ignoreRequest: 'Ignorar la Solicitud', + acceptConnection: 'Aceptar Conexión', + requestConnection: 'Solicitar Conexión', + cancelRequest: 'Cancelar Solicitud', + resyncContact: 'Resincronizar Contacto', + + login: 'Iniciar sesión', + create: 'Crear', + createAccount: 'Crear cuenta', + accountLogin: 'Inicio de sesión en la cuenta', + toCreate: 'Las cuentas se crean a través de un enlace generado desde el panel de administración.', + admin: 'Administrador', + loginError: 'Error de inicio de sesión', + loginMessage: 'Por favor, confirme su nombre de usuario y contraseña.', + createError: 'Error al crear la cuenta', + createMessage: 'Por favor, consulte con su administrador.', + adminError: 'Error de acceso', + adminMessage: 'Por favor, confirme su contraseña', + + confirmDelete: 'Eliminar cuenta', + areSure: '¿Estás seguro de que quieres eliminar la cuenta?', + + mb: 'MB', + gb: 'GB', + copied: 'Copiado', + accounts: 'Cuentas', + accessAccount: 'Acceder a la Cuenta', + browserLink: 'Enlace del Navegador', + mobileToken: 'Código Móvil', + createLink: 'Enlace para Crear una Cuenta', + configureServer: 'Configurar Servidor', + reloadAccounts: 'Recargar Cuentas', + disableAccount: 'Desactivar Cuenta', + enableAccount: 'Activar Cuenta', + deleteAccount: 'Eliminar Cuenta', + hostHint: 'dominio:puerto/aplicación', + federatedHost: 'Anfitrión federado', + storageLimit: 'Límite de almacenamiento (GB) / cuenta', + storageHint: '0 para Ilimitado', + keyType: 'Tipo de Clave', + accountCreation: 'Creación de Cuenta Pública', + enablePush: 'Activar Cotificaciones push', + allowUnsealed: 'Permitir Temas no Seguros', + topicContent: 'Contenido del tema:', + enableImage: 'Activar imágenes en el tema', + imageHint: 'Permitir la publicación de imágenes en temas', + enableAudio: 'Activar audio en el tema', + audioHint: 'Permitir la publicación de audio en temas', + enableVideo: 'Activar videos en el tema', + videoHint: 'Permitir la publicación de videos en temas', + enableWeb: 'Activar llamadas WebRTC', + webHint: 'Permitir llamadas de audio y video a contactos', + serverUrl: 'URL del servidor WebRTC', + urlHint: 'turn:ip:puerto?transporte=udp', + webUsername: 'Nombre de usuario WebRTC', + webPassword: 'Contraseña WebRTC', + failedLoad: 'Error al cargar', + limit: 'Límite', + + deleteMessage: 'Eliminar mensaje', + messageHint: '¿Estás seguro de que quieres eliminar el mensaje?', + attachImage: 'Adjuntar Imagen', + attachVideo: 'Adjuntar Video', + attachAudio: 'Adjuntar Audio', + attachFile: 'Adjuntar Archivo', + fontColor: 'Cambiar el Color de la Fuente', + fontSize: 'Cambiar el Tamaño de la Fuente', + postMessage: 'Publicar Mensaje', + + close: 'Cerrar', + leave: 'Salir', + confirmTopic: 'Eliminar Rema', + sureTopic: '¿Estás seguro de que quieres eliminar este tema?', + confirmLeave: 'Salir del Rema', + sureLeave: '¿Estás seguro de que quieres salir de este tema?', + + details: 'Detalles', + host: 'Anfitrión', + guest: 'Invitado', + editSubject: 'Editar tema', + editMembership: 'Editar Miembros del Tema', + deleteTopic: 'Eliminar tema', + leaveTopic: 'Salir del tema', + + integrated: 'Integrado', + microphone: 'Micrófono', + camera: 'Cámara' +} diff --git a/net/web/src/context/useSettingsContext.hook.js b/net/web/src/context/useSettingsContext.hook.js index f4ee7169..7bcc2088 100644 --- a/net/web/src/context/useSettingsContext.hook.js +++ b/net/web/src/context/useSettingsContext.hook.js @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react'; import { LightTheme, DarkTheme } from 'constants/Colors'; -import { en, fr } from 'constants/Strings'; +import { en, fr, sp } from 'constants/Strings'; export function useSettingsContext() { @@ -13,7 +13,7 @@ export function useSettingsContext() { scheme: null, colors: {}, menuStyle: {}, - languages: [{ value: null, label: 'Default' }, { value: 'en', label: 'English' }, { value: 'fr', label: 'Français' }], + languages: [{ value: null, label: 'Default' }, { value: 'en', label: 'English' }, { value: 'fr', label: 'Français' }, { value: 'sp', label: 'Español' }], language: null, strings: en, dateFormat: 'mm/dd', @@ -122,16 +122,22 @@ export function useSettingsContext() { if (language && language.startsWith('fr')) { updateState({ language: 'fr', strings: fr, themes: [{ value: null, label: fr.default }, { value: 'dark', label: fr.dark }, { value: 'light', label: fr.light }]}); } + else if (language && language.startsWith('sp')) { + updateState({ language: 'sp', strings: sp, themes: [{ value: null, label: sp.default }, { value: 'dark', label: sp.dark }, { value: 'light', label: sp.light }]}); + } else if (language && language.startsWith('en')) { updateState({ language: 'en', strings: en, themes: [{ value: null, label: en.default }, { value: 'dark', label: en.dark }, { value: 'light', label: en.light }]}); } else { const browser = navigator.language; if (browser && browser.startsWith('fr')) { - updateState({ language: null, strings: fr }); + updateState({ language: null, strings: fr, themes: [{ value: null, label: fr.default }, { value: 'dark', label: fr.dark }, { value: 'light', label: fr.light }]}); + } + else if (browser && browser.startsWith('sp')) { + updateState({ language: null, strings: sp, themes: [{ value: null, label: sp.default }, { value: 'dark', label: sp.dark }, { value: 'light', label: sp.light }]}); } else { - updateState({ language: null, strings: en }); + updateState({ language: null, strings: en, themes: [{ value: null, label: en.default }, { value: 'dark', label: en.dark }, { value: 'light', label: en.light }]}); } } @@ -171,6 +177,10 @@ export function useSettingsContext() { localStorage.setItem('language', 'fr'); updateState({ language: 'fr', strings: fr, themes: [{ value: null, label: fr.default }, { value: 'dark', label: fr.dark }, { value: 'light', label: fr.light }]}); } + else if (code && code.startsWith('sp')) { + localStorage.setItem('language', 'sp'); + updateState({ language: 'sp', strings: sp, themes: [{ value: null, label: sp.default }, { value: 'dark', label: sp.dark }, { value: 'light', label: sp.light }]}); + } else if (code && code.startsWith('en')) { localStorage.setItem('language', 'en'); updateState({ language: 'en', strings: en, themes: [{ value: null, label: fr.default }, { value: 'dark', label: en.dark }, { value: 'light', label: en.light }]}); @@ -181,6 +191,9 @@ export function useSettingsContext() { if (browser && browser.startsWith('fr')) { updateState({ language: null, strings: fr, themes: [{ value: null, label: fr.default }, { value: 'dark', label: fr.dark }, { value: 'light', label: fr.light }]}); } + if (browser && browser.startsWith('sp')) { + updateState({ language: null, strings: sp, themes: [{ value: null, label: sp.default }, { value: 'dark', label: sp.dark }, { value: 'light', label: sp.light }]}); + } else { updateState({ language: null, strings: en, themes: [{ value: null, label: en.default }, { value: 'dark', label: en.dark }, { value: 'light', label: en.light }]}); }