From 7f72992d06c14c1517c9b207aa0eae70da8adcc4 Mon Sep 17 00:00:00 2001 From: foramontano <64919325+foramontano@users.noreply.github.com> Date: Wed, 9 Sep 2020 16:05:55 +0200 Subject: [PATCH] Foramontano/adding languages (#89) - Doc that describes the steps to add a new language to Spacedeck Open - New file with translated entries for using in Spacedeck Open in Spanish - Include 'es' as new locale in Spacedeck Open - Include a radiobutton for users could select the new language --- docs/adding_languages.md | 26 +++ locales/es.js | 324 ++++++++++++++++++++++++++++++++++++ spacedeck.js | 2 +- views/partials/account.html | 3 + views/spacedeck.html | 2 + 5 files changed, 356 insertions(+), 1 deletion(-) create mode 100644 docs/adding_languages.md create mode 100644 locales/es.js diff --git a/docs/adding_languages.md b/docs/adding_languages.md new file mode 100644 index 0000000..5972973 --- /dev/null +++ b/docs/adding_languages.md @@ -0,0 +1,26 @@ +## Adding a new language to Spacedeck Open + +To add a new language to Spacedeck Open, follow these steps: + +*The steps are ilustrated with Spanish (locale 'es') as the new language* + +- Include the new locale ('es') at the locale list (./spacedeck.js) +``` + locales: ["en",..., "es"], +``` +- Create the new translation file (/locales/**es.js** thar it's a copy of /locales/en.js). and translate the entries. +- Include the javascript for letting Spanish info accesible (at the end of /views/spacedeck.html) + + ``` + ... + window.locales.es = {}; + ... + window.locales.es.translation = {% include "./../locales/es.js" %}; + </script> + ``` +- Include a radiobutton for users could seleect the new language (/views/partials/account.html) + ``` + <label class="radio" v-bind:class="{checked: user.prefs_language=='es'}" v-on:click="save_user_language('es')"> + <input type="radio" id="user-preferences_language" name="language" value="es"><span>Español</span> + </label> + ``` diff --git a/locales/es.js b/locales/es.js new file mode 100644 index 0000000..b51ebf6 --- /dev/null +++ b/locales/es.js @@ -0,0 +1,324 @@ +{ + "ok": "OK", + "cancel": "Cancelar", + "close": "Cerrar", + "open": "Abrir", + "folder": "Directorio", + "save": "Salvar", + "saved": "Salvado", + "created": "creado", + "duplicate": "Duplicar", + "delete": "Borrar", + "remove": "Eliminar", + "set": "ajustar", + "reset": "reiniciar", + "thanks": "Gracias", + "share": "Compartir", + "signup": "RegÃstrate", + "login": "Iniciar sesión", + "logout": "Cerrar sesión", + "email": "Correo Electrónico", + "password": "Contraseña", + "width": "Anchura", + "height": "Altura", + "nick": "Nombre", + "role": "Rol", + "members": "Miembros", + "actions": "Acciones", + "or": "o", + "you": "tú", + "via": "via", + "by": "por", + "zero": "Cero", + "page": "Página", + "new": "Nuevo", + "copy": "Copiar", + "home": "Inicio", + "owner": "Propietario", + "space": "Espacio", + "second": "Segundo", + "not_found": "No encontrado.", + "untitled_space": "Espacio sin tÃtulo", + "untitled_folder": "Directorio sin tÃtulo", + "untitled": "sin tÃtulo", + "sure": "Está seguro?", + "specify": "Por favor, Especifica", + "confirm": "Por favor, Confirma", + "error_unknown_email": "Esta combinación correo electrónico/contraseña no es conocida.", + "error_password_confirmation": "La contraseña introducida no coincide.", + "error_domain_blocked": "Tu dominio está bloqueado.", + "error_user_email_already_used": "Esta dirección de correo electrónico ya se está usando.", + "support": "Soporte para Spacedeck", + "offline": "Offline. Clica para más.", + "error": "Lo siento, pero algo salió mal. Por favor, contacta con support@spacedeck.com", + "welcome": "Bienvenido", + "claim": "Tu Pizarra digital.", + "trynow": "Inténtalo ahora.", + "about": "Sobre nosotros.", + "terms": "Términos", + "contact": "Contacto", + "privacy": "Privacidad", + "business_adress": "Dirección de Negocios", + "post_adress": "Dirección postal", + "phone": "Teléfono", + "ceo": "Director gerente", + "name": "Nombre", + "confirm_subject": "Correo electrónico de confirmación de Spacedeck", + "confirm_body": "Gracias por iniciar sesión en Spacedeck.\nPor favor, clica en el siguiente enlace para confirmar tu dirección de correo electrónico.\n", + "confirm_action": "Confirmar Ahora", + "team_invite_membership_subject": "Inivitación de equipo para %s", + "team_invite_membership_body": "Has sido invitado a %s en Spacedeck. Por favor, clica en el siguiente enlace para aceptar la invitación.", + "team_invite_user_body": "Has sido invitado a %s en Spacedeck.\nTu contraseña temporal es \"%s\".\nPor favor, clica en el siguiente enlace para aceptar la invitación.", + "team_invite_admin_body": "%s fue invitado tu equipo: %s. La contraseña temporal es \"%s\".", + "team_invite_membership_acction": "Aceptar", + "team_new_member_subject": "Un nuevo Miembro para el Equipo %s se ha registrado", + "team_new_member_body": "%s se acaba de unir al Equipo %s en Spacedeck.", + "space_invite_membership_subject": "%s te invitó al Espacio %s ", + "space_invite_membership_body": "Has sido invitado por %s para unirte al Espacio %s en Spacedeck. Por favor, clica en el siguiente enlace para aceptar la invitación.", + "space_invite_membership_action": "Aceptar", + "folder_invite_membership_subject": "Espacio", + "folder_invite_membership_body": "Has sido invitado a un Equipo en Spacedeck. Por favor, clica en el siguiente enlace para aceptar la invitación.", + "folder_invite_membership_acction": "Aceptar", + "login_google": "Iniciar sesión con Google", + "save_changes": "Salvar Cambios", + "upgrade": "Mejorar", + "upgrade_now": "Mejorar ahora", + "create_space": "Crear Espacio", + "create_folder": "Crear Directorio", + "email_unconfirmed": "Correo electrónico no confirmado", + "confirmation_sent": "Correo electrónico enviado", + "folder_filter": "Filtro", + "sort_by": "Ordenar por", + "last_modified": "Última Modificación", + "last_opened": "Última Apertura", + "title": "TÃtulo", + "edit_team": "Editar Equipo", + "edit_account": "Edit Cuenta", + "log_out": "Cerrar Sesión", + "no_spaces_yet": "¡Bienvenido! Puedes crear Espacios y Directorios aquà utilizando los botones que se encuentran en la esquina superior izquierda.", + "new_folder_title": "Nuevo tÃtulo para el directorio", + "folder_settings": "Ajustes de Directorio", + "upload_cover_image": "Cargar imagen de cubierta", + "spacedeck_pro_ad_folders": "Con Spacedeck Pro, puedes organizar un ilimitado número de Espacios y Directorios, y gestionar el control de acceso para cada Directorio. ¿Te gustarÃa aprender más sobre las caracterÃsticas Pro?", + "spacedeck_pro_ad_versions": "Con Spacedeck Pro, puedes organizar un ilimitado número de versiones para cada Espacio asà como realizar un seguimiento de su progreso o mantener instantáneas ('snapshots') seguras. ¿Te gustarÃa aprender más sobre las caracterÃsticas Pro?", + "spacedeck_pro_ad_pdf": "Con Spacedeck Pro, puedes exportar tus Espacios como PDFs para su archivo, envÃo por correo, o impresión. ¿Te gustarÃa aprender más sobre las caracterÃsticas Pro?", + "spacedeck_pro_ad_zip": "Con Spacedeck Pro, puedes exportar los contenidos de un Espacio empaquetado como un fichero ZIP. ¿Te gustarÃa aprender más sobre las caracterÃsticas Pro?", + "spacedeck_pro_ad_colors": "Con Spacedeck Pro, puedes puedes usar tus propios colores usando un selector de color profesional.", + "profile_caption": "Perfil", + "upload_avatar": "Cardar Avatar", + "uploading_avatar": "Cargando Avatar…", + "avatar_dimensions": "Dimensiones recomendadas: 200×200 pixels.", + "profile_name": "Nombre", + "profile_email": "Dirección de correo electrónico", + "send_again": "Enviar de nuevo", + "confirmation_sent_long": "Correo electrónico con enlace de confirmación enviado. Por favor, revisa tu bandeja de entrada de Correo.", + "confirmation_sent_another": "Otro enlace de confirmación enviado.", + "confirmation_sent_dialog_text": "Te hemos enviado un correo explicando como confirmar tu dirección de correo electrónico.", + "payment_caption": "Pago", + "language_caption": "Idioma", + "notifications_caption": "Notificaciones", + "notifications_option_chat": "Infórmame via correo electrónico sobre nuevos cometarios", + "notifications_option_spaces": "EnvÃame un resumen diario de lo que sucedió en mis Espacios y Directorios.", + "password_caption": "Contraseña", + "current_password": "Contraseña Actual", + "new_password": "Nueva Contraseña", + "verify_password": "Verificar Contraseña", + "change_password": "Cambiar Contraseña", + "reset_password": "Reiniciar Contraseña", + "terminate_caption": "Borrar Cuenta", + "terminate_warning": "Si borras tu cuenta, todos los Espacios, Directorios y Mensajes (incluyendo todo el contenido que tú y otras personas crearon en tus Espacios) serán destruidos.", + "terminate_warning2": "Esta acción no puede deshacerse.", + "terminate_reason": "Mensaje", + "terminate_reason_caption": "Ayúdannos a mejorar compartiendo las razones por las que cancelas la cuenta.", + "terminate_terminate": "Terminar", + "space_blank1": "¡Bienvenido a un nuevo Espacio en blanco!", + "space_blank2": "Suelta ficheros, pega enlaces", + "space_blank3": "o utilizar las herramientas que aparecen abajo", + "space_blank4": "para rellenar este Espacio con contenido.", + "draft": "Borrador", + "publish": "Publicar", + "published": "Publicado", + "save_version": "Salvar Versión", + "version_saved": "Versión Salvada", + "post": "Publicar mensaje", + "chat_invite_cta1": "¡La Collaboración es divertida!", + "chat_invite_cta2": "¿Por qué no ", + "chat_invite_cta3": "invitar a algunas personas", + "chat_invite_cta4": "a trabajar contigo?", + "chat_message_placeholder": "Escribe tu mensaje…", + "view": "Ver", + "edit": "Editar", + "present": "Presentar", + "chat": "Chatear", + "meta": "Metadatos", + "tool_search": "Buscar", + "tool_upload": "Cargar", + "tool_text": "Texto", + "tool_shape": "Dar forma", + "tool_zones": "Zonas", + "tool_canvas": "Fondo pizarra", + "search_media": "Buscar multimedia…", + "type_here": "Escriba aquÃ", + "text_formats": "Formatos", + "format_p": "Párrafos", + "format_bullets": "Lista con 'Bullets'", + "format_numbers": "Lista Numérica", + "format_h1": "Titular 1", + "format_h2": "Titular 2", + "format_h3": "Titular 3", + "font_size": "Tamaño de Fuente", + "line_height": "Altura de la LÃnea", + "tool_align": "Alinear", + "tool_styles": "Estilos", + "tool_bullets": "'Bullets'", + "tool_numbers": "Números", + "color_fill": "Rellenar", + "color_stroke": "Trazo", + "color_text": "Texto", + "tool_type": "Tipo", + "tool_box": "Caja", + "tool_link": "Enlace", + "tool_layout": "Disposición", + "tool_options": "Opciones", + "tool_stroke": "Trazar", + "tool_delete": "Borrar", + "tool_lock": "Bloquear", + "tool_copy": "Copiar", + "stack": "Apilar", + "tool_circle": "CÃrculo", + "tool_hexagon": "Hexágono", + "tool_square": "Cuadrado", + "tool_diamond": "Diamante", + "tool_bubble": "Burbuja", + "tool_cloud": "Nube", + "tool_burst": "Ráfaga", + "tool_star": "Estrella", + "tool_heart": "Corazón", + "tool_scribble": "Garabatear", + "tool_line": "LÃneas", + "tool_arrow": "Flecha", + "search_media_placeholder": "Buscar multimedia en web…", + "add_zone": "Nueva Zona", + "palette": "Paleta", + "picker": "Selector", + "background_image_caption": "Imagen", + "background_color_caption": "Color", + "upload_background_caption": "Clica para cargar una imagen de fondo", + "upload_background": "Cargar Fundo", + "access_caption": "Acceso", + "versions_caption": "Versiones", + "info_caption": "Información", + "mode_private": "Privado: Solo miembros pueden visualizar o editar", + "mode_public": "Público: Cualquiera con el enlace puede visualizar", + "invite_collaborators": "Invitar Colaboradores", + "revoke_access": "Anular Acceso", + "invite": "Enviar Invitaciones", + "invitee_email_address": "Dirección de correo electrónico del nuevo miembro", + "optional_message": "Mensaje optional", + "role_viewer": "Visualizador", + "role_editor": "Editor", + "role_admin": "Administrador", + "new_space_title": "Nuevo tÃtulo para el Espacio", + "team": "Equipo", + "search": "Buscar", + "search_no_results": "Búsqueda sin resultados", + "search_clear": "Limpiar búsqueda", + "rename": "Renombrar", + "mobile": "teléfono móvl", + "image": "imagen", + "tool_filter": "fÃltro", + "canel": "canel", + "invite_membership_action": "Acción afiliación de miembros", + "viewer": "visualizador", + "editor": "editor", + "admin": "administrador", + "logging_in": "iniciando sesión", + "password_confirmation": "Confirmación de Contraseña", + "confirm_again": "Te hemos enviado un correo electrónico explicando cómo puedes confirmar tu dirección de correo electrónico.", + "confirmed": "Tú Cuenta ha sido confirmada satisfactoriamente. Gracias.", + "signing_up": "Registrándote", + "password_check_inbox": "Por favor, comprueba tu bandeja de entrada de correo electrónico", + "new_space": "Nuevo Espacio", + "tool_more": "Más", + "what_is_your_name": "¡Bienvenido a %s! Por favor, elige un nombre de usuario.", + "lang": "es", + "landing_title": "Tu Pizarra en la Web.", + "landing_claim": "Spacedeck te permite combinar fácilmente todo tipo de multimedia en pizarras virtuales: notas de texto, fotos, enlaces web, incluso videos y grabaciones de audio. ", + "landing_example": "Las personas usan Spacedeck para organizar en equipo sus ideas y asà poder ver proyectos completos de un vistazo, o bien en escuelas y universidades para obtener experiencias de aprendizaje más enriquecedoras y conectadas.", + "spaces": "Mis Espacios", + "access_editor_link": "Enlace de Edición Instantanea", + "access_editor_link_desc": "Proporciona este enlace a cualquier persona que deba poder editar instantáneamente este Espacio, no se requiere una cuenta: ", + "access_editor_link_desc_slug": "Este enlace también contiene el nombre del Espacio. ", + "access_anonymous_edit_blocking": "Los editores anónimos únicamente pueden cambiar sus propios elementos", + "access_current_members": "Miembros Actuales", + "access_new_members": "Invita Nuevos Miembros", + "access_no_members": "Los Miembros de este Espacio se mostrarán aquÃ.", + "comments": "comentarios", + "landing_customers": "Confiado por multitudes.", + "landing_features_title": "Sencillo de usar.", + "landing_features_text": "El nuevo Spacedeck 6 tiene un hermoso y optimizado interfaz de usuario que hace que tu trabajo sea más fácil y divertido que nunca, al tiempo que te brinda funciones aún más poderosas:", + "landing_features_1": "<b>Arrastra & suelta</b> imágenes, vÃdeos y áudios desde tu computadora o desde la web", + "landing_features_2": "<b>Escribe texto y formatéalo</b> con pleno control sobre fuente, color y estilo", + "landing_features_3": "<b>Dibuja, anota y resalta</b> incluyendo contornos gráficos", + "landing_features_4": "Convierte tu tablero en un <b>área de presentación con zoom</b>", + "landing_features_5": "<b>Colabora y chatea</b> en tiempo real con compañeros de equipo, alumnos y amigos.", + "landing_features_6": "<b>Comparte Espacios</b> en la web o via correo electrónico", + "landing_features_7": "<b>Exporta tu trabajo</b> como fichero imprimible PDF o como ZIP", + "landing_pricing": "Increiblemente asequible.", + "landing_pricing_lite": "Uso Libre/Personal", + "landing_pricing_lite_text": "La versión sencilla y completa para recopilar imágenes y tomar notas.", + "landing_pricing_pro_features_list": "<ul><li>Espacios ilimitados</li><li>Estructura de Directorios</li><li>Exportación a ficheros PDF y ZIP</li><li>Sin Marcas de Agua</li><li>Personaliza tu fondo</li><li>Historial de Actividad</li><li>20 GB de Almacenamiento</li><ul>", + "landing_pricing_pro": "€4,90/Usuario/Mes <br><small>o 49,90/Usuario/Año</small>", + "landing_pricing_pro_text": "Con todo la potencia que esperas.", + "landing_pricing_pro_features": "Con toda la potencia que esperas.", + "welcome_subject": "Bienvenido a Spacedeck", + "welcome_body": "¡Hola!\nGracias por registrárte en Spacedeck.<br>Esperamos que disfrutes trabajando con Espacios.<br>Recuerda, tu cuenta incluye colaboradores ilimitados. Siénte libre de compartir tus Espacios con amigos y colegas de todo el mundo.", + "invite_emails": "Dirección/ones de correo electrónico separadas por coma (,)", + "history_recently_updated": "Recientemente Actualizado", + "history_recently_empty": "Aún no ha pasado nada.", + "parent_folder": "Directorio padre", + "created_by": "Creado por", + "last_updated": "Última actualización", + "feedback_sent": "¡Muchas gracias por tu comentarios!", + "role_member": "Miembro", + "team_invite_membership_action": "Aceptar invitación", + "space_message_subject": "Nuevo Mensaje en el Espacio %s", + "space_message_body": "%s escribió en %s: \n", + "pro_ad_history_headline": "Cuando actualices a Spacedeck Pro, verás el historial de actualizaciones recientes en todos tus Espacios (compartidos) aquÃ.", + "password_reset_subject": "Restablecer contraseña para Spacedeck", + "password_reset_body": "Has solicitado el restablecimiento de tu contraseña en Spacedeck.\nPor favor, clica en el siguiente enlace para establecer una nueva contraseña.", + "password_reset_action": "Restablecer Ahora", + "was_offline": "La conexión con Spacedeck se ha interrupido. Si tienes trabajo sin salvar, mantén abierta, por favor, esta pestaña del navegadorhasta que la conexión esté restablecida, entonces toca los objetos no salvados.", + "subscription_failed_user_subject": "Problemas con el pago en tu Spacedeck", + "subscription_failed_user_body": "Desafortunadamente, no pudimos procesar su método de pago. Puede crear fácilmente un nuevo método de pago que incluya PayPal en la configuración de su cuenta.", + "subscription_failed_team_subject": "Problemas con el pago en tu Spacedeck", + "subscription_failed_team_body": "Desafortunadamente, no pudimos procesar su método de pago para tu Cuenta de Equipo. Corrija su método de pago lo antes posible.", + "team_name": "Nombre del Equipo", + "subdomain": "Subdominio", + "team_adresses": "Direcciones de correo electrónico del Equipo", + "add": "Añadir", + "invited": "invitado", + "duplicate_destination": "¿En qué directorio quieres duplicar este Espacio??", + "duplicate_confirm": "Duplicar %s en la directorio %s?", + "duplicate_success": "%s fue duplicado en %s.", + "goto_space": "Ve al Espacio %s", + "goto_folder": "Ve al Directorio %s", + "stay_here": "Permanece aquÃ", + "sharing": "Compartiendo", + "list": "Lista para Exportar", + "link": "Enlace", + "download_space": "Espacio de Descarga", + "type": "Tipo", + "download": "Descarga", + "Previous Zone": "Zona Previa", + "Next Zone": "Zona Siguiente", + "promote": "Promover", + "demote": "Degradar", + "more": "Más", + "lock": "Bloquear", + "unlock": "Desbloquear", + "follow_present": "Seguir", + "mute_present": "Dejar de Seguir", + "follow_present_help": "Si alguien más está presentando este espacio, los otros miembros siguen automáticamente la presentación. Active o desactive el seguimiento con este botón.", + "export": "exportar" +} diff --git a/spacedeck.js b/spacedeck.js index ee96a5f..830ddd4 100644 --- a/spacedeck.js +++ b/spacedeck.js @@ -34,7 +34,7 @@ console.log("Booting Spacedeck Open… (environment: " + app.get('env') + ")"); app.use(logger(isProduction ? 'combined' : 'dev')); i18n.expressBind(app, { - locales: ["en", "de", "fr", "oc"], + locales: ["en", "de", "fr", "oc", "es"], defaultLocale: "en", cookieName: "spacedeck_locale", devMode: (app.get('env') == 'development') diff --git a/views/partials/account.html b/views/partials/account.html index 046be8a..1eba3b6 100644 --- a/views/partials/account.html +++ b/views/partials/account.html @@ -107,6 +107,9 @@ </label> <label class="radio" v-bind:class="{checked: user.prefs_language=='oc'}" v-on:click="save_user_language('oc')"> <input type="radio" id="user-preferences_language" name="language" value="oc"><span>Occitan</span> + </label> + <label class="radio" v-bind:class="{checked: user.prefs_language=='es'}" v-on:click="save_user_language('es')"> + <input type="radio" id="user-preferences_language" name="language" value="es"><span>Español</span> </label> </div> </div> diff --git a/views/spacedeck.html b/views/spacedeck.html index 426e51d..47f5837 100644 --- a/views/spacedeck.html +++ b/views/spacedeck.html @@ -85,9 +85,11 @@ window.locales.de = {}; window.locales.fr = {}; window.locales.oc = {}; + window.locales.es = {}; window.locales.en.translation = {% include "./../locales/en.js" %}; window.locales.de.translation = {% include "./../locales/de.js" %}; window.locales.fr.translation = {% include "./../locales/fr.js" %}; window.locales.oc.translation = {% include "./../locales/oc.js" %}; + window.locales.es.translation = {% include "./../locales/es.js" %}; </script> </html> -- GitLab