diff --git a/shell/i18n/es.i18n.json b/shell/i18n/es.i18n.json new file mode 100644 index 0000000000..1e8168ecf1 --- /dev/null +++ b/shell/i18n/es.i18n.json @@ -0,0 +1,1836 @@ +{ + "error": "Error: %s", + "shell": { + "layout": { + "demoExpired": { + "title": "La demo ha caducado", + "canUpgrade": "¡Gracias por probar la Demo de Sandstorm! Tu cuenta de demo ha caducado. Si quieres continuar usando Sandstorm y hacer permanentes tus datos, por favor inicia sesión.", + "cannotUpgrade": "¡Gracias por probar la Demo de Sandstorm! Tu cuenta ha caducado.", + "signOut": "Cerrar sesión" + }, + "adminAlert": { + "icon": "!", + "title": "Nota del Administrador" + }, + "demoModal": { + "header": "Sandstorm es una suite de productividad web auto-alojable.", + "withAppDemo": "con aplicaciones como %s.", + "withoutAppDemo": "con todas las aplicaciones que necesitas, en un solo lugar.", + "startButton": { + "withAppDemo": "Probar %s »", + "withoutAppDemo": "Comenzar »" + }, + "explanation": "

Sandstorm hace fácil poner en marcha aplicaciones en tu propio servidor. Además de mejorar la privacidad y el control, esto lleva las aplicaciones de software libre a una amplia audiencia.

", + "securityOverview": "

Sandstorm también es increíblemente seguro. Si te interesa la seguridad, echa un vistazo a una revisión del modelo de seguridad de Sandstorm.

" + } + }, + "notifications": { + "hint": "Notificaciones", + "text": "Notificaciones" + }, + "notificationsPopup": { + "title": "Notificaciones", + "empty": "No hay notificaciones..." + }, + "loading": { + "title": "Cargando...", + "text": "Cargando..." + }, + "notFound": { + "title": "No encontrado", + "text": "404 No encontrado :(" + }, + "grainLogContents": { + "prefix": "..." + }, + "grainLog": { + "title": "Registro de depuración: %s" + }, + "signup": { + "title": "Reclamar invitación", + "signedUp": { + "keyIsUsedWithOrigin": "¡Ya has iniciado sesión! Ahora instala algunas aplicaciones.", + "keyIsNotUsed": "Parece que ya tienes una cuenta, así que no necesitas esta clave de inicio de sesión." + }, + "keyIsUsed": "Lo siento, ya se ha usado esa clave de inicio de sesión.", + "processing": "Por favor, espera...", + "signInGuide": "Primero necesitas iniciar sesión. Pulsa en \"Iniciar sesión\" arriba a la derecha.", + "invalidKey": "Lo siento, esto no es una clave de inicio de sesión válida." + }, + "uploadStatus": { + "title": "Subiendo...", + "uploadFailedWithError": "Falló la subida: %s %s", + "statusWithProgress": "%s... %s", + "status": "%s...", + "uploadFailed": "Falló la subida. Por favor, inténtalo de nuevo." + }, + "uploadTest": { + "title": "Página de prueba de subida", + "explanation": "Esta página está pensada para ser usada por los scritps de prueba.", + "uploadApp": "Subir aplicación:", + "uploadBackup": "Subir copia de seguridad:" + }, + "referrals": { + "title": "Programa de referencia", + "header": { + "isPaid": { + "title": "¡Consigue hasta 30 GB de espacio libre cuando tus amistades comparten en Oasis!", + "explanation": "Por cada amigo o amiga que crea un enlace para compartir, te premiaremos con 2 GB." + }, + "isNotPaid": { + "title": "¡Consigue granitos ilimitados y hasta 2 GB de espacio libre cuando tus amistades comparten en Oasis!", + "explanation": "Por cada amigo o amiga que crea un enlace para compartir, te premiaremos con 50 MB. También conseguirás granitos ilimitados." + } + }, + "howTo": { + "title": "Compartir es referenciar", + "explanation": "Para comenzar, abre cualquier granito y pulsa Compartir acceso.", + "getStart": { + "step1": "Compartes un granito con tu amigo o amiga (que aún no usa Oasis).", + "step2": "Tu amigo o amiga inicia sesión.", + "step3": "Tu amigo o amiga comparte un granito con cualquier otra persona (o contigo)." + } + }, + "status": { + "title": "Tus referencias y estado", + "explanation": "Una vez que envíes un enlace para compartir, las personas aparecerán en esta lista tras iniciar sesión.", + "pending": { + "title": "Todavía necesita compartir", + "explanation": "Dile a estas personas que creen un granito y lo compartan contigo. ¡Debes visualizar el granito que compartieron contigo!" + }, + "success": { + "title": "Referencias exitosas", + "explanation": "Has referenciado correctamente a estas personas. ¡Felicidades!" + } + }, + "finePrint": { + "title": "La letra pequeña", + "warningWithAccountLink": "Tu bono de referencia dura hasta 1 año tras la referencia. Los términos de este programa de referencia pueden cambiar sin previo aviso; sin embargo, estos cambios no afectarían a los bonos que ya hayas recibido. Si necesitas más espacio, mejora tu cuenta.", + "explanation": "Los suscriptores de pago pueden conseguir hasta 30 GB de espacio libre, 2 GB por persona que referencien, además del espacio de su cuenta acorde a su nivel. Los titulares de cuentas gratuitas no son elegibles para un bono de referencia." + } + }, + "about": { + "title": "Acerca de Sandstorm", + "intro": { + "explanation": "Sandstorm.io es una plataforma de alojamiento de software libre para uso personal/privado de instancias de aplicaciones web. Los usuarios pueden subir e instalar determinado software a través de una interfaz sencilla de tipo tienda de aplicaciones. Además de una mejor privacidad, es la única manera de hacer viables las aplicaciones web de software libre.", + "version": "Versión: %s", + "unofficialWarning": "AVISO: Este servidor funciona con una versión no oficial de Sandstorm, que puede contener modificaciones no revisadas por los desarrolladores." + }, + "changelog": { + "title": "Cambios recientes" + }, + "developers": { + "title": "Desarrolladores principales" + }, + "advisors": { + "title": "Consultores" + }, + "corporate": { + "title": "Patrocinadores corporativos", + "explanation": "Estas empresas han contribuido sustancialmente a la campaña de financiación colectiva de Sandstorm." + }, + "individual": { + "title": "Patrocinadores individuales clave", + "explanation": "Estas personas han contribuido sustancialmente a la campaña de financiación colectiva de Sandstorm." + }, + "backers": { + "title": "Contribuidores", + "explanation": "de nuestra campaña en Indiegogo >", + "anonymous": "y %s contribuidores anónimos", + "loading": "cargando..." + }, + "dependencies": { + "title": "Obras de terceras partes usadas", + "license": "licencia", + "explanation": "Estas obras tienen derechos de autor de sus respectivos titulares y se usan bajo los términos de sus respectivas licencias." + }, + "copyright": { + "title": "Derechos de autor", + "license": "La implementación de Sandstorm tiene derechos de autor de Sandstorm Development Group, Inc. y sus contribuidores. La implementación está bajo la licencia Apache License 2.0.", + "trademark": "\"Sandstorm\" y el logo de Sandstorm son marcas registradas de Sandstorm Development Group, Inc., y no deben usarse para anunciar trabajos derivados ni servicios comerciales sin consentimiento escrito de Sandstorm Development Group, Inc." + }, + "terms": { + "license": "Licencia", + "terms": "Términos del servicio", + "privacy": "Política de privacidad" + } + } + }, + "grains": { + "title": "Granitos", + "grainView": { + "notFoundWithId": "No se ha encontrado un granito con ID %s.", + "quotaExhausted": "No se puede iniciar el granito porque la cuota del propietario/a está agotada. Si es tu granito, por favor mejora tu plan de suscripción para continuar.", + "openWithWhichIdentity": "¿Te gustaría revelar tu identidad para este granito, o permanecer anónimo/a?", + "openInIncognitoMode": "Abrir en modo incógnito", + "revealMyIdentity": "Revelar mi identidad" + }, + "grainInMyTrash": { + "explanation": "Este granito está en tu papelera. No puedes acceder a menos que lo restaures a tu lista principal.", + "restore": "Restaurar a la lista principal" + }, + "grainInOwnersTrash": { + "explanation": "Ya no puedes acceder a este granito porque su propietario/a lo ha movido a la papelera." + }, + "grainOwnerSuspended": { + "explanation": "Ya no puedes acceder a este granito porque la cuenta de su propietario/a ha sido suspendida." + }, + "wrongIdentity": { + "explanation": "Este enlace pretende ser para el usuario:" + }, + "requestAccess": { + "permissionDenied": "No tienes permiso para acceder a este granito.", + "requestAccessHint": "Solicitar acceso", + "requestAccess": "Solicitar acceso", + "warnIdentityRevealing": "Solicitar acceso revelará tu identidad al propietario/a del granito.", + "sendRequest": "Enviando la solicitud...", + "waitForApproving": "Solicitud enviada. Recibirás un correo electrónico si se aprueba la solicitud.", + "requestFailed": "La solicitud falló por: %s", + "signInPlease": "Por favor inicia sesión para solicitar acceso." + }, + "invalidToken": { + "invalidToken": "Token inválido: %s" + }, + "revokedShareLink": { + "linkRevoked": "Lo siento, este enlace ha sido revocado." + }, + "grainTitle": { + "was": "era: %s", + "renamedFrom": "renombrado de: %s" + }, + "grainDeleteButton": { + "hint": "Mover a la papelera", + "text": "Mover a la papelera" + }, + "grainDebugLogButton": { + "hint": "Mostrar registro de depuración", + "text": "Regisro" + }, + "grainBackupButton": { + "hint": "Descargar copia de seguridad", + "text": "Copia de seguridad" + }, + "grainBackupPopup": { + "title": "Descargar copia de seguridad", + "warning": "¡Aviso! Restaurar esta copia de seguridad puede no funcionar como esperas.", + "processing": "Preparando copia de seguridad...", + "cancelHint": "cancelar", + "cancel": "Cancelar", + "confirmHint": "descargar copia de seguridad", + "confirm": "Descargar copia de seguridad" + }, + "grainCloneButton": { + "hint": "Clonar granito", + "text": "Clonar", + "copyTitle": "Copia de %s" + }, + "grainClonePopup": { + "title": "Clonar granito", + "processing": "Clonando granito..." + }, + "grainRestartButton": { + "hint": "Reiniciar aplicación", + "text": "Reiniciar" + }, + "grainApiTokenButton": { + "hint": "Obtener clave web", + "text": "Obtener clave web" + }, + "grainApiTokenPopup": { + "title": "Claves web", + "processing": "Generando...", + "cancel": "Cancelar", + "copyForExternalApp": "Copiar esta clave web y dársela a la aplicación externa:", + "back": "Volver", + "description": "Una clave web permite conectar una aplicación externa (p.ej. una aplicación móvil) a esta aplicación.", + "labelTitle": "Etiqueta:", + "labelPlaceholder": "p.ej. 'Aplicación Android'", + "roleTitle": "Rol:", + "permissionTitle": "acceso completo", + "create": "Crear", + "webkeyListTitle": "Claves web existentes:", + "revokeHint": "Revocar", + "revoke": "Revocar" + }, + "grainShareButton": { + "hint": "Compartir acceso a este granito", + "text": "Compartir acceso" + }, + "whoHasAccessPopup": { + "title": "Quién tiene acceso", + "noLoggedInUsers": "Ningún usuario de los que han iniciado sesión ha visitado tus enlaces aún.", + "nobody": "No has permitido acceso a nadie.", + "addedBy": "agregado por", + "revokeHint": "Revocar", + "revoke": "Revocar", + "hasCustomPermissions": "[tiene permisos personalizados]" + }, + "selectRole": { + "hint": "seleccionar un rol" + }, + "emailInviteTab": { + "demoModeAlert": "En el modo demo no se pueden enviar correos para compartir. Crea una cuenta para enviar correos para compartir, o, alternativamente, usa un enlace para compartir.", + "personalMessagePlaceholder": "Escribe un mensaje personal (opcional)...", + "send": "Enviar", + "sending": "Enviando...", + "success": "Enviado correctamente.", + "reset": "+ Enviar más invitaciones", + "startOver": "<< Comenzar de nuevo" + }, + "shareableLinkTab": { + "withRoles": "Cualquiera con este enlace:", + "withoutRoles": "Cualquiera con este enlace puede acceder al granito.", + "labelPlaceholder": "Etiqueta (opcional)", + "labelExplanation": "Usa una etiqueta para recordar a quién enviaste este enlace único.", + "create": "Crear", + "creating": "Generando...", + "success": "Copia este enlace:", + "reset": "+ Crear otro enlace", + "cancel": "Cancelar" + }, + "shareWithOthers": { + "title": "Compartir con otros", + "sendInviteTab": "Enviar una invitación", + "shareableLinkTab": "Obtener un enlace para compartir", + "whoHasAccess": "Ver quién tiene acceso" + }, + "grainSharePopup": { + "oldSharingModelDescription": "Este granito usa el modo antiguo para compartir. Puedes compartirlo copiando/pegando la URL desde la barra de direcciones", + "upgradeDescription": "Puedes actualizar este granito al nuevo modelo, pero cualquiera con quien habías compartido este granito perderá el acceso; tendrás que volverlo a compartir.", + "upgradeWarning": "La actualización no se puede deshacer.", + "upgrade": "actualizar", + "openInIncognitoMode": "Estás viendo este granito de manera anónima.", + "toShareAccess": "Para compartir el acceso, copia este enlace:", + "openNonAnonymouslyHead": "Para más opcoines de compartición, debes", + "openNonAnonymouslyLink": "abrir este granito de manera no anónima", + "openNonAnonymouslyTail": ".", + "signIn": "Para más opciones de compartición, por favor inicia sesión." + }, + "grainPowerboxRequest": { + "powerboxRequestHint": "Solicitud de Powerbox", + "powerboxRequest": "P" + }, + "grainPowerboxOffer": { + "powerboxOfferHint": "Oferta de Powerbox", + "powerboxOffer": "P" + }, + "grainPowerboxOfferPopup": { + "title": "Oferta de Powerbox", + "dismiss": "Descartar" + }, + "share": { + "grainNotFoundWithId": "No se ha encontrado un granito con ID %s. ¿Quizá necesitas iniciar sesión con otra cuenta?", + "signIn": "Debes iniciar sesión para permitir acceso a un granito." + }, + "grainlist": { + "sandstormGrainListPage": { + "introButton": { + "hint": "¿Qué es un granito?" + }, + "mainListButton": "Ver lista principal", + "restoreButton": "Restaurar copia de seguridad...", + "search": { + "placeholder": "buscar" + }, + "usageInfo": { + "quota": "__count__ de __quota__ granitos", + "size": "__size__ de __total__ usados" + }, + "trashButton": "Ver papelera (%s)", + "moveToTrash": "Mover a la papelera", + "trash": { + "emptyButton": "Vaciar la papelera", + "explanation": "(Los granitos se eliminarán permanentemente después de estar 30 días en la papelera. Para conservar un granito, restáurarlo a la lista principal.)" + }, + "noGrains": { + "notFound": "No se encontraron granitos coincidentes.", + "inTrash": "Algunos granitos en la papelera coinciden con la búsqueda.", + "trashButton": "Ver la papelera", + "empty": "La papelera está vacía.", + "explanation": "Aún no tienes granitos.", + "hasApps": "Selecciona una aplicación y crea tu primer granito.", + "hasNoApp": "Instala una aplicación para crear tu primer granito." + }, + "transfers": { + "massTransfer": "Transferencia masiva...", + "transfers": "Transferencias", + "transfer": "Transferir", + "blockedInitiateBeforeSource": "Parece que estás intentando iniciar una nueva transferencia desde", + "blockedInitiateAfterSource": ", pero ya tienes una transferencia en curso. Por favor completa o cancela la transferencia existente para continuar.", + "incomingTransferActive": "Transferencia entrante activa", + "cancel": "Cancelar", + "remaining": "Restante", + "retryErrors": "Errores de reintento", + "pauseTransfer": "Pausar transferencia", + "continueTransfer": "Continuar transferencia", + "startTransfer": "Comenzar transferencia", + "closeTransfer": "Cerrar transferencia", + "outgoingTransferActive": "Transferencia saliente activa", + "currentlyTransferring": "Actualmente estás transfiriendo granitos a:", + "manageAt": "Gestionar tu transferencia en:", + "inOrder": "Para comenzar una nueva transferencia (entrante o saliente), debes cancelar la existente.", + "cancelTransfer": "Cancelar transferencia", + "initiateInboundTransfer": "Iniciar transferencia entrante", + "initiateOutboundTransfer": "Iniciar transferencia saliente", + "theSandstormServerAt": "El servidor Sandstorm en", + "wantsToTransfer": "quiere transferir granitos a este servidor.", + "insecureSource": "AVISO: El servidor fuente no soporta HTTPS. Los datos se transferirán sin cifrar.", + "deny": "Denegar", + "fetchGrainList": "Obtener lista de granitos", + "noTransfersInProgress": "Actualmente no hay transferencias en curso.", + "transferAllMyGrainsTo": "Transferir todos mis granitos a:", + "initiateTransfer": "Iniciar transferencia", + "whatDoesThisDo": "¿Qué hace esto?", + "whatCan": "Puedes usar esta función para transferir todos tus granitos a un nuevo servidor de Sandstorm. Esto automatiza el proceso de guardar una copia de seguridad de cada granito en este servidor, y restaurar cada copia de seguridad en el servidor que especifiques.", + "whatWhen": "Cuando inicies la transferencia, se te redirigirá al servidor de destino donde tendrás que iniciar sesión. Entonces se te dará la opción de qué granitos transferir, y finalmente iniciarás la transferencia. La transferencia continuará en segundo plano, puedes cerrar la sesión.", + "whatOrder": "Para que una transferencia funcione, el servidor de destino debe poder conectar con el servidor origen directamente por internet. Sin embargo, lo opuesto no es necesario. Así, puedes realizar una transferencia masiva que transfiera granitos de un servidor en la internet pública (como Sandstorm Oasis) a un servidor en una red interna privada, pero no al contrario. Si el servidor origen soporta HTTPS, entonces la transferencia se hará por HTTPS, sin tener en cuenta el protocolo del servidor de destino.", + "warningGiving": "AVISO: Estás dando permiso a %s para descargar todos tus granitos desde este servidor. ¿Estás seguro/a?", + "errorAcceptingTransfer": "Error al aceptar la transferencia:" + } + }, + "sandstormGrainTable": { + "bulkAction": { + "disabledHint": "To perform bulk actions, you must first select some grains in the list." + }, + "tableHeader": { + "title": "Name", + "size": "Size", + "lastUsed": "Last activity", + "ownership": "Mine/Shared", + "collaborators": "Collaborators" + }, + "tableBody": { + "was": "(was: %s)", + "renamedFrom": "(renamed from: %s)", + "new": "Unopened", + "mine": "My grain", + "shared": "Shared with me" + } + }, + "contactAutocomplete": { + "contactInputBox": { + "placeholder": "Enter email addresses or names" + } + } + } + }, + "notifications": { + "appUpdateNotificationItem": { + "title": "App updates are available:", + "appUpdates": "__name__: version __version__ is available", + "submitButton": { + "hint": "Update all of the above apps", + "text": "Apply updates" + }, + "dismissButton": { + "hint": "Ignore the above updates", + "text": "Dismiss" + } + }, + "mailingListBonusNotificationItem": { + "explanationWithBonus": "Subscribe to our announcement list and get %s bonus storage (1-2 emails per month).", + "submitButton": "Subscribe", + "dismissButton": "No thanks" + }, + "referralNotificationItem": { + "paidUser": "Get up to 30 GB bonus with the", + "unpaidUser": "Unlimited grains & up to 2 GB bonus with the", + "link": "referral program »", + "dismissButton": "Dismiss" + }, + "adminNotificationItem": { + "explanation": "You can help Sandstorm by sending us some anonymous usage stats. Click here for more info." + }, + "backgroundedGrainNotificationItem": { + "title": "__grain__ is backgrounded:", + "cancelButton": { + "hint": "Stop the background app", + "text": "Cancel" + } + }, + "identityChangesNotificationItem": { + "explanation": "We're changing the way identities work in Sandstorm. Your account may be affected. Click here to learn more." + }, + "grainActivityNotificationItem": { + "title": "__sender__ in __grain__:", + "dismissButton": { + "hint": "Dismiss this notification", + "text": "Dismiss" + } + } + }, + "powerboxBuiltins": { + "uiViewPowerboxConfiguration": { + "explanation": "with permissions:", + "fullAccess": "Full access", + "connectButton": "Connect", + "chooseHostedObjectButton": "Browse grain contents »" + }, + "ipNetworkPowerboxCard": { + "explanation": "Admin: grant all outgoing network access", + "encryptedWith": "(encrypted with %s)" + }, + "ipInterfacePowerboxCard": { + "explanation": "Admin: grant all incoming network access" + }, + "emailVerifierPowerboxCard": { + "verifyWith": "Verify e-mail addresses using %s", + "verifyWithAnyService": "Verify e-mail addresses using any login service" + }, + "identityPowerboxConfiguration": { + "explanation": "with permissions:", + "fullAccess": "Full access", + "connectButton": "Connect" + }, + "addNewVerifiedEmailPowerboxCard": { + "explanation": "Add a new address" + }, + "httpUrlPowerboxCard": { + "useUrl": "Use %s" + }, + "httpArbitraryPowerboxCard": { + "explanation": "Specify URL..." + }, + "httpArbitraryPowerboxConfiguration": { + "explanation": "Enter URL:", + "placeholder": "https://example.com", + "connectButton": "Connect" + }, + "httpOAuthPowerboxCard": { + "useService": "Use %s" + }, + "httpOAuthPowerboxConfiguration": { + "requstPermissionsFromService": "Requesting permissions from %s (see popup)." + } + }, + "styleguide": { + "title": "Sandstorm style guide", + "note": "(note: this is a work in progress.)", + "copyRules": { + "title": "Copy rules", + "rule1": "Be terse but clear. Avoid technical terms where less-technical ones will do.", + "rule2": "Capitalize the first letter of the first word of a section heading or button. Do not capitalize the second word, or anything else, unless referring to a proper noun like Google or GitHub.", + "rule3": "Use verbs for text on buttons. The button text should describe what clicking that button will do.", + "rule4": "Use nouns for text which is a link. The link text should indicate what the link will take you to.", + "rule5": "Use nouns for basically everything else, too, to communicate the information architecture. Section headings should be nouns which describe the content of the section. Labels should be nouns which describe the content of the field." + }, + "styleRules": { + "title": "Style rules", + "rule1": "Stick to a limited color palette. (TODO: add specific colors)", + "rule2": "Use typefaces no smaller than 13px for text content. Readability is important and not everyone has young eyes.", + "rule3": "Make click targets no smaller than 32px square or 26px tall if appreciably wider. Remember that due to Fitts' Law, larger click targets are easier to interact with." + }, + "forms": { + "title": "Forms", + "rule1": "Use the standard-form class where appropriate.", + "rule2": "The primary action button of a form should be at the bottom right of the form. Secondary buttons should line up to the left of that primary action button.", + "rule3": "When providing text input fields, place labels above the input, not side-by-side or inside the field as placeholder text. Place additional explanation or instructions below the input. Placeholder text should be used for examples, not instructions.", + "rule4": "Forms are generally used for transactional interactions, where the user cares about the success or failure of the application. Avoid optimistic UI in favor of multi-state UI which communicates network activity, success, and failure. A common pattern is:", + "rule4-1": "Have the default state of the form. Disable a save button until the user makes a change.", + "rule4-2": "When the user clicks an action button, start the RPC, and disable the entire form to indicate that the action is underway.", + "rule4-3": "When the RPC completes, if the RPC failed, show an error message at the top of the context over which the action applies. If the RPC succeeded, either indicate a success message (again, at the top of the context over which the action applies) or if this was a modal interaction and the completion of the RPC indicates successful completion of the workflow, dismiss the form with no additional message." + }, + "example": { + "title": "An example:", + "label": "Email", + "placeholder": "alice@example.com", + "subtext": "You might want to receive notifications.", + "submitButton": "Save", + "discardButton": "Discard" + } + }, + "admin": { + "title": "Admin", + "admin": { + "newAdmin": { + "title": "Admin panel", + "wildcardHostBroken": "WARNING: This server seems to have its WILDCARD_HOST misconfigured. Until you fix it, you will not be able to use any apps. You can read more info in the Sandstorm docs and in your browser's Javascript console. You'll need to adjust DNS, SSL/TLS certificates, or edit the sandstorm.conf file. If you see no information in the JS console, or wish to test if you have fixed the problem, reload this page to re-run the test. If you're still having problems, please file an issue.", + "websocketBroken": "WARNING: This server seems to be unable to create a WebSocket. Sandstorm may appear to run fine, but many apps will fail to run properly. Learn more. Usually this is caused by a reverse proxy like nginx or Apache that needs to be reconfigured. If you think you are seeing this message in error, please reload this page or file an issue.", + "hasSetupToken": "You are not logged in as an admin, but you do have a setup token. You can either visit the setup wizard or view the system log.", + "hasNoSetupToken": "You are not logged in as an admin. To access the admin panel, log in as an admin user or generate a token from the command line by running `sandstorm admin-token`." + }, + "newAdminRoot": { + "configuration": { + "title": "Configuration" + }, + "management": { + "title": "Management" + } + } + }, + "identityProviders": { + "name": "Login providers", + "providers": { + "emailPassLess": "E-mail (passwordless)" + }, + "subtext": "How users log in.", + "newAdminIdentity": { + "explanation": "Choose which services users may use to identify themselves. Anyone can log in, but only users you invite will be able to install apps or create grains.", + "organizationLinkPrefix": "To configure organization membership and settings, see", + "organizationLink": "organization settings", + "organizationLinkPostfix": "." + }, + "adminIdentityProviderConfigureEmail": { + "title": "Email login configuration", + "error": "Failed to save changes: %s", + "warning": "Note: to use email login, you'll need to configure email delivery after this.", + "explanation": "Email login has no additional configuration options.", + "saveButton": "Save", + "enableButton": "Enable", + "cancelButton": "Cancel", + "disableButton": "Disable" + }, + "googleLoginSetupInstructions": { + "explanation": "First, you'll need to get a Google Client ID. Follow these steps:", + "step1": "Visit https://console.developers.google.com/", + "step2": "\"Create Project\", if needed. Wait for Google to finish provisioning.", + "step3": "On the left sidebar, go to \"Credentials\" and, on the right, \"OAuth consent screen\". Make sure to enter an email address and a product name, and save.", + "step4": "On the left sidebar, go to \"Credentials\". Click the \"Create credentials\" button, then select \"OAuth client ID\" as the type.", + "step5": "Select \"Web application\" as your application type.", + "step6": "Set Authorized Javascript Origins to: %s", + "step7": "Set Authorized Redirect URI to: %s/_oauth/google", + "step8": "Finish by clicking \"Create\"." + }, + "adminIdentityProviderConfigureGoogle": { + "title": "Google login configuration", + "formerBaseUrlWarning": "This server moved from __former__ to __current__. You'll need to visit https://console.developers.google.com/ and update the \"Authorized Javascript Origins\" and \"Authorized Redirect URI\" for this Client ID to include the values below.", + "error": "Failed to save changes: %s", + "explanation": "Then, copy over your Client ID and Client secret below:", + "clientId": "Client ID:", + "clientSecret": "Client secret:", + "saveButton": "Save", + "enableButton": "Enable", + "cancelButton": "Cancel", + "disableButton": "Disable" + }, + "githubLoginSetupInstructions": { + "explanation": "First, you'll need to get a Github Client ID and Client secret. Follow these steps:", + "step1": "Visit https://github.com/settings/applications/new", + "step2": "Set Homepage URL to: %s", + "step3": "Set Authorization callback URL to: %s_oauth/github" + }, + "adminIdentityProviderConfigureGitHub": { + "title": "GitHub login configuration", + "formerBaseUrlWarning": "This server moved from __former__ to __current__. You'll need to visit https://github.com/settings/developers and update the Homepage URL and Authorization callback URL for this application to the values below.", + "explanation": "Then, copy over your Client ID and Client secret below:", + "clientId": "Client ID:", + "clientSecret": "Client secret:", + "saveButton": "Save", + "enableButton": "Enable", + "cancelButton": "Cancel", + "disableButton": "Disable" + }, + "adminIdentityProviderConfigureLdap": { + "title": "LDAP login configuration", + "error": "Failed to save changes: %s", + "url": { + "label": "LDAP server URL:", + "subtext": "e.g. ldap://ldap.example.com:389. Use port 636 for SSL." + }, + "searchBindDn": { + "label": "Bind user DN", + "subtext": "The DN to bind as when searching for a user in the tree, e.g. cn=admin,ou=users,dc=example,dc=com. Optional, but needed if your server doesn't allow unauthenticated searches." + }, + "searchBindPassword": { + "label": "Bind user password", + "subtext": "Optional, needed if specifying bind DN above." + }, + "base": { + "label": "Base DN", + "subtext": "The root object under which to search for user account nodes, e.g. ou=users,dc=example,dc=com" + }, + "searchUsername": { + "label": "LDAP username attribute", + "subtext": "The LDAP attribute on a user object which represents the user's username (what they will enter in the username field when signing in)." + }, + "nameField": { + "label": "LDAP given name attribute", + "subtext": "The LDAP attribute on a user object which represents the user's full display name." + }, + "emailField": { + "label": "LDAP email attribute", + "subtext": "The LDAP attribute on a user object which represents the user's email address." + }, + "filter": { + "label": "Additional LDAP filter criteria", + "subtext": "An optional LDAP query fragment that will be included in the user search. This is not commonly used. See RFC2254." + }, + "caCert": { + "label": "LDAP CA certificate", + "placeholder": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----", + "subtext": "This is only necessary if your server supports SSL and is using a private CA not in the common trusted set. Note that it does NOT work to enter the LDAP server's own certificate here -- it must be the certificate of a CA which has signed the LDAP server's certificate." + }, + "saveButton": "Save", + "enableButton": "Enable", + "cancelButton": "Cancel", + "disableButton": "Disable" + }, + "adminIdentityProviderConfigureSaml": { + "title": "SAML login configuration", + "explanation": "Your SAML IDP should be configured to return a persistent nameID. In addition, if you are not using Active Directory, you must configure your IDP to provide two extra attributes, email and displayName.", + "serviceUrl": "The Service URL of this server is: %s", + "logoutUrl": "The Service Logout URL of this server is: %s", + "metadataUrlAt": "If your SAML IDP supports reading the service provider metadata from a URL, then you can point it at: __text__", + "error": "Failed to save changes: %s", + "entryPoint": { + "label": "SAML provider entry point URL:", + "placeholder": "https://YOUR_SAML_PROVIDER.com/sso/saml" + }, + "logout": { + "label": "SAML provider logout URL (optional):", + "placeholder": "https://YOUR_SAML_PROVIDER.com/sso/saml/SingleLogoutService" + }, + "publicCert": { + "label": "SAML cert for above provider:", + "placeholder": "base64 encoded cert (e.g. MIID...8F==)" + }, + "entityId": { + "label": "Entity ID:" + }, + "saveButton": "Save", + "enableButton": "Enable", + "cancelButton": "Cancel", + "disableButton": "Disable" + }, + "adminIdentityProviderTable": { + "title": "Login provider", + "status": "Status" + }, + "adminIdentityRow": { + "enabled": "Enabled", + "disabled": "Not enabled", + "baseUrlChanged": { + "explanation": "Disabled due to BASE_URL change", + "reconfigureButton": "reconfigure" + }, + "configureButton": { + "hint": "Configure %s login", + "text": "Configure" + } + } + }, + "organization": { + "name": "Organization settings", + "subtext": "Smoother onboarding and collaboration for larger teams.", + "organizationSettingsBlurb": { + "explanation": "Sandstorm allows you to define an organization. You can automatically apply some settings to all members of your organization. Users within the organization will automatically be able to log in, install apps, and create grains." + }, + "newAdminOrganization": { + "success": "Saved changes.", + "error": "Failed to save changes: %s", + "membership": { + "title": "Organization membership", + "emailToggle": { + "label": "Users authenticated via email address", + "subtext": "Note: disabled because email login is not configured." + }, + "emailDomain": { + "label": "Domain:", + "subtext": "Users with an email address at this domain will be members of this server's organization." + }, + "gappsToggle": { + "label": "Users authenticated via Google Apps for Work", + "subtext": "Note: disabled because Google login is not configured." + }, + "gappsDomain": { + "label": "Domain:", + "subtext": "Users with a Google Apps for Work account under this domain will be members of this server's organization." + }, + "ldapToggle": { + "label": "Users authenticated via LDAP", + "subtext": "Note: disabled because LDAP login is not configured." + }, + "samlToggle": { + "label": "Users authenticated via SAML", + "subtext": "Note: disabled because SAML login is not configured." + } + }, + "settings": { + "title": "Organization settings", + "disallowGuests": { + "label": "Disallow collaboration with users outside the organization.", + "subtext": "Users will be required to log in as a member of your organization to view sharing links. Guest access will be disabled." + }, + "shareContacts": { + "label": "Make all organization users visible to each other", + "subtext": "This setting automatically adds users within the organization to each other's contact list so that they can share grains with each other. Disable this if you have some users whose identity should stay hidden from other users." + } + }, + "saveButton": "Save" + } + }, + "emailConfig": { + "name": "Email configuration", + "subtext": "How email gets sent to users.", + "newAdminEmailConfig": { + "outbound": { + "title": "Outbound email", + "warning": "Email is unconfigured. Email-related features like email login, notifications, sharing invitations, and requesting access will be unavailable until you configure email." + }, + "howItWorks": { + "title": "How Sandstorm uses email", + "explanation": "Sandstorm sends email notifications, and Sandstorm apps can send email notifications, too. Every app receives a unique email address, so Sandstorm needs to send email from a variety of \"From:\" addresses. Therefore, Gmail SMTP won't work, but there are other free services. See more info in the docs." + }, + "success": "Saved changes.", + "error": "Failed to save changes: %s", + "address": { + "hostname": "SMTP host", + "port": "Port", + "subtext": "Use port 25 for SMTP (unencrypted or with StartTLS), port 465 for TLS-encrypted SMTPS." + }, + "username": { + "label": "Username (optional)" + }, + "password": { + "label": "Password (optional)" + }, + "returnAddress": { + "label": "Sandstorm server's own email address", + "subtext": "Sandstorm will send login emails, notifications of granted access requests, and other emails from this address. It will also use this address in the SMTP envelope." + }, + "submitButton": "Save Configuration", + "testButton": "Test", + "disableButton": "Disable email" + }, + "emailTestPopup": { + "title": "Send a test email", + "testAddress": { + "label": "Send test mail to:" + }, + "pending": "Sending...", + "submitButton": "Send test email", + "closeButton": "Close" + }, + "emailDisablePopup": { + "title": "Really disable email?", + "explanation": "This will disable all outbound email delivery for this server, including sharing via email, email token login (if enabled), and email notifications to users.", + "disableButton": "Disable email", + "closeButton": "Close" + } + }, + "personalization": { + "name": "Personalization", + "subtext": "Customize a splash page, terms of service, privacy policy, etc.", + "newAdminPersonalization": { + "serverTitle": { + "label": "Server title:", + "subtext": "The name of this server, as used when communicating with users." + }, + "splashUrl": { + "label": "Splash URL (experimental):", + "subtext": "This web page will be displayed in the background behind the login dialog (the home page when logged out). For security reasons, the page must be hosted within this Sandstorm server's wildcard host (otherwise it will be blocked by Content-Security-Policy). We suggest using a static web publishing app like Hacker CMS to host content.WARNING: This feature is experimental; in particular the style and positioning of the login box is subject to change without notice. Please let us know if you'd like to see it stabilize." + }, + "signupDialog": { + "label": "Signup dialog:", + "subtext": "This text will be displayed to users who click on signup links." + }, + "termsOfService": { + "label": "Terms of service URL:", + "placeholder": "https://example.com/tos", + "subtext": "If provided, new users will be required to agree to the linked terms of service." + }, + "privacyPolicy": { + "label": "Privacy policy URL:", + "placeholder": "https://example.com/privacy", + "subtext": "If provided, new users will be required to agree to the linked privacy policy." + }, + "whitelabeling": { + "title": "Whitelabeling", + "logo": { + "label": "Custom logo on sign-in dialog", + "resetButton": "Use default", + "uploadButton": "Upload logo" + }, + "hideTroubleshooting": { + "label": "Hide troubleshooting button" + }, + "hideAbout": { + "label": "Hide \"About Sandstorm\" links" + }, + "hideSendFeedback": { + "label": "Hide \"Send feedback\" link" + }, + "useServerTitleForHomeText": { + "label": "Use server title (above) for home link", + "subtext": "If enabled, changes the default label \"Sandstorm\" on the link at the very top left to match whatever you specified for the Server title above." + }, + "customLoginProviderName": { + "label": "Custom login button text", + "subtext": "Replaces the text \"with LDAP\" and \"with SAML\" on the login page with the specified text." + } + }, + "saveButton": "Save" + } + }, + "preinstalledApps": { + "name": "Pre-installed apps", + "subtext": "Choose apps to pre-install for new users.", + "newAdminPreinstalledApps": { + "explanation": "Apps you configure on this page to be pre-installed will automatically be installed (show under /apps) for new users.", + "productivitySuite": { + "label": "Productivity Suite", + "subtext": "We recommend pre-installing these core apps that are useful to most users." + }, + "systemSuite": { + "label": "System apps", + "subtext": "We recommend pre-installing these system apps that greatly enhance the abilities of Sandstorm." + }, + "allApps": { + "label": "All apps on market", + "subtext": "The checked apps below will be installed by default for all new users.", + "lessButton": "Show fewer apps", + "moreButton": "Show %s more apps" + }, + "saveButton": "Save" + }, + "_appRow": { + "download": { + "success": "Downloaded", + "failed": "Failed" + } + } + }, + "appSources": { + "name": "App sources", + "subtext": "Where to look for apps and app updates.", + "newAdminAppSources": { + "appMarketUrl": { + "label": "App market URL", + "subtext": "The \"Install...\" button on the Apps page will link to this URL." + }, + "enableAppUpdates": { + "label": "Enable app update notifications", + "subtext": "Updates to apps will be automatically downloaded by the Sandstorm server daily and notifications sent to users asking if they want to update their installed apps." + }, + "appIndexUrl": { + "label": "App index URL", + "subtext": "This is the URL that the Sandstorm server will check to learn about app updates." + }, + "saveButton": "Save", + "restoreButton": "Restore defaults" + } + }, + "networking": { + "name": "Networking", + "altName": "Security", + "subtext": "Control how the network is accessed.", + "newAdminNetworking": { + "ipBlacklist": { + "label": "Server-side request IP blacklist:", + "subtext": "Users will be prohibited from making requests to these IP addresses. This includes making a request from an app, downloading an SPK file from a user-provided URL, etc. You may specify one IP address or network (in CIDR notation, e.g. \"127.0.0.0/8\") per line. The default value includes standard local and private network addresses. Note that when an HTTP proxy is in use, this setting may be ignored; the proxy must implement its own blacklist." + }, + "saveButton": "Save", + "restoreButton": "Restore defaults" + } + }, + "certificates": { + "name": "SSL/TLS Certificates", + "subtext": "Configure certificates manually or using Let's Encrypt.", + "newAdminCertificates": { + } + }, + "users": { + "name": "Users", + "subtext": "Manage all users on this Sandstorm installation." + }, + "userAccounts": { + "newAdminUserTableRow": { + "admin": { + "hint": "Admin", + "cap": "A" + }, + "user": { + "hint": "User", + "cap": "U" + }, + "visitor": { + "hint": "Visitor", + "cap": "V" + }, + "unknownIdentity": "Unknown credential", + "unknownIdentifier": "unknown identifier", + "manageButton": "Manage" + }, + "newAdminUserTable": { + "header": { + "name": "Name", + "credentials": "Credentials", + "created": "Created", + "lastActive": "Last Active", + "actions": "Actions" + }, + "inviteLink": "Invite new user", + "notFound": "No users matched your filter.", + "processing": "Loading users..." + }, + "newAdminUsers": { + "search": { + "placeholder": "search" + }, + "filter": { + "explanation": "Show:", + "admin": "Admin", + "user": "User", + "visitor": "Visitor" + } + } + }, + "userDetails": { + "newAdminUserDetailsIdentityTableRow": { + "profilePicture": { + "label": "Profile picture" + }, + "handle": { + "title": "Handle", + "emails": "Emails" + }, + "pronouns": { + "hint": "Pronouns", + "label": "Pronouns" + }, + "emails": { + "hint": "Emails", + "label": "Emails", + "primary": "Primary", + "verified": "Verified", + "unverified": "Unverified", + "notFound": "No known emails." + }, + "properties": { + "login": "Can log in", + "org": "Org. member" + }, + "unkonwn": { + "profilePicture": { + "cell": "(unknown name)" + }, + "service": { + "hint": "unknown service", + "label": "(unknown service)", + "cell": "(unknown name)" + }, + "handle": { + "cell": "(unknown handle)" + }, + "pronouns": { + "cell": "(unknown pronouns)" + }, + "created": { + "cell": "unknown creation date" + }, + "lastActive": { + "cell": "unknown activity date" + } + } + }, + "newAdminUserDetailsIdentityTable": { + "header": { + "credential": "Credential", + "created": "Created", + "lastActive": "Last Active", + "properties": "Properties" + } + }, + "newAdminUserDetails": { + "role": { + "title": "Role", + "admin": { + "label": "Admin", + "explanation": "Manages all accounts. Can install apps, create grains, and administer the server.", + "isAdmin": "Current role", + "isNotAdmin": "Promote to admin" + }, + "user": { + "label": "User", + "explanation": "Can install apps and create grains.", + "isUser": "Current role", + "isAdmin": "Demote to user", + "isNotUser": "Promote to user" + }, + "visitor": { + "label": "Visitor", + "explanation": "Can use and re-share shared grains, but cannot create grains of their own nor install apps.", + "isVisitor": "Current role", + "isNotVisitor": "Demote to visitor" + } + }, + "credentials": { + "title": "Credentials" + }, + "profile": { + "title": "Profile" + }, + "status": { + "title": "Status", + "deleting": "Suspended - Pending deletion %s", + "suspended": "Suspended", + "active": "Active", + "unsuspendButton": "Unsuspend account", + "suspendButton": "Suspend account", + "deleteButton": "Delete account" + }, + "deletePopup": { + "title": "Delete %s", + "explanation": "You are about to mark %s's account for deletion. Once marked for deletion, this account will be suspended, and admins will have 7 days to cancel the pending deletion by returning to this page and clicking the \"Unsuspend Account\" button. %s will not be able to stop this suspension/deletion.", + "detail": "After 7 days, %s's account will be permanently deleted. Deleting this account will:", + "detail1": "Permanently delete any grains %s created", + "detail2": "Revoke all sharing links %s created", + "detail3": "Remove %s from all users' contact lists", + "detail4": "Delete all credentials owned by this account (except credentials also associated with another account).", + "deleteButton": "Delete account", + "cancelButton": "Cancel" + }, + "suspendPopup": { + "title": "Suspend %s", + "detail": "Suspending this user account will:", + "detail1": "Prevent any grains created by %s from being opened", + "detail2": "Disable any sharing links created by %s", + "detail3": "This also applies to all credentials owned by this account (except credentials associated with another account)", + "suspendButton": "Suspend account", + "cancelButton": "Cancel" + }, + "loading": "Loading user data..." + } + }, + "userInvite": { + "newAdminUserInviteLink": { + "explanation": "You can invite others to create accounts on your server by giving them an account creation link. People you invite will be granted User permission and be able to install apps and create grains of their own. Alternatively, if you want to share a specific grain with someone, you can do that within the grain's \"Share Access\" menu.", + "title": "Create a link", + "invite": { + "explanation": "This will create an account creation link which you can send to someone.", + "createButton": "Create link" + } + }, + "newAdminUserInviteEmail": { + "title": "Send an email", + "emailWarning": { + "explanation": "Email has not been configured, so sending invites via email is disabled.", + "configureLink": "Configure email" + }, + "explanation": "This will create a link and send it in an email.", + "to": { + "label": "To:", + "placeholder": "alice@email.com\nbob@example.com", + "subtext": "Email addresses, one per line." + }, + "subject": { + "label": "Subject:" + }, + "body": { + "label": "Body:", + "subtext": "$KEY will be replaced with the newly-generated link." + }, + "sendButton": "Send invite" + }, + "newAdminUserInvite": { + "title": "Invite" + } + }, + "systemStatus": { + "name": "System log", + "subtext": "View Sandstorm's debug log.", + "newAdminLogContents": { + "ellipsis": "..." + }, + "newAdminStatus": { + "downloadButton": "Download full log" + } + }, + "stats": { + "name": "Statistics", + "subtext": "View usage statistics for this server.", + "header": { + "date": "date", + "users": "users", + "grains": "grains", + "appName": "App name", + "owners": "owners", + "sharedUsers": "sharedUsers", + "daily": "daily", + "weekly": "weekly", + "monthly": "monthly", + "forever": "forever" + }, + "body": { + "notFound": "There are no stats recorded yet.", + "loading": "Loading..." + }, + "newAdminStats": { + "share": { + "title": "Publish anonymously to Sandstorm dev team", + "explanation": "We'd like to know how many Sandstorm users there are, to make graphs and such. Is it okay to send the numbers on this page once a day to the Sandstorm team, so that we can add them to the totals? Any stats you send are anonymous.", + "enableButton": "Send anonymous stats", + "disableButton": "Don't send", + "control": { + "explanation": "The developers of Sandstorm like to know how many Sandstorm users there are, to make graphs and such. You can help us by opting in to sharing the numbers on this page once a day to the Sandstorm team, so that we can add them to our totals. Any stats shared are submitted anonymously.", + "label": "Anonymous stats reporting to sandstorm.io:", + "enabled": "Enabled", + "disabled": "Disabled", + "disableButton": "Disable", + "enableButton": "Enable" + } + }, + "json": { + "title": "View as JSON", + "explanation": "If you want to integrate Sandstorm stats with an internal stats tool, use this secret link to retrieve the tables below as JSON. You can revoke the current link at any time by generating a new link.", + "label": "Stats JSON link:", + "regenerateButton": "Generate new link" + }, + "userGrains": { + "title": "Users and grains", + "current": "Right now: __users__ users, __grains__ grains", + "today": "Today: __users__ users, __grains__ grains" + }, + "apps": { + "title": "Apps", + "label": "Select a date:" + } + } + }, + "maintenanceMessage": { + "name": "Maintenance message", + "subtext": "Communicate potential downtime to users.", + "newAdminMaintenance": { + "explanation": "You can set a maintenance message which will be shown to all users in the menu bar, on the top right. This is useful for announcing scheduled maintenance so users can be prepared to tolerate downtime. If the message text is empty, no message will be displayed.", + "variables": "You may use the following variables in the \"Message text\" field, which will be automatically substituted with useful values:", + "variable1": "$TIME : The time component of \"Maintenance time\", converted to the user's local time (eg. \"1:15:45 PM\")", + "variable2": "$DATE : The date component of \"Maintenance time\", converted to the user's local time (eg. \"6/19/2015\")", + "variable3": "$IN_COUNTDOWN : An active countdown until \"Maintenance time\" (eg. \"in 3 days\" or \"in 1 minute\"). Displays \"any moment\" at the time specified in \"Maintenance time\" and then disappears after an hour.", + "messageText": { + "label": "Message text:", + "subtext": "" + }, + "maintenanceTime": { + "label": "Maintenance time:", + "subtext": "The time you intend to start performing maintenance, formatted like \"%s\"." + }, + "url": { + "label": "Link URL (optional):", + "subtext": "If given, the maintenance message will render as a clickable link to the provided URL." + }, + "saveButton": "Set message" + } + }, + "networkCapabilities": { + "name": "Network capabilities", + "subtext": "Manage direct network access for grains.", + "explanation": "This page displays network capabilities granted to grains. By default, grains have very limited network access. A grain can request full network access while it is being used. Only an admin can approve the request, which grants a \"network capability\" to the grain.", + "newAdminNetworkCapabilitiesTableCapabilityRow": { + "adminAccount": "Admin account %s", + "unknownGranter": "Unknown granter", + "anyone": "Anyone with the token", + "unknownRecipient": "Unknown recipient", + "revoked": "Revoked", + "revokeButton": "Revoke" + }, + "newAdminNetworkCapabilitiesTable": { + "header": { + "grantBy": "Granted by", + "grantTo": "Granted to", + "grantTime": "Time", + "actions": "Actions" + }, + "notFound": "No capabilities found." + }, + "newAdminNetworkCapabilitiesSection": { + "filter": { + "label": "Showing:", + "active": "Active (%s)", + "revoked": "Revoked (%s)" + } + }, + "newAdminNetworkCapabilities": { + "networkCaps": "Outbound network access", + "networkCapsTls": "TLS-encrypted outbound network access", + "interfaceCaps": "Inbound network access" + } + }, + "hostingManagement": { + "name": "Hosting management", + "newAdminHostingManagement": { + "explanation": "This feature is experiemental and only works with the LDAP login provider at the moment. Use with caution.", + "quotaEnabled": { + "label": "Enable quota for users", + "subtext": "Enable Quota management on this server. This requires both SAML and LDAP to be configured, and email addresses will be used to match between the two." + }, + "quotaLdapAttribute": { + "label": "LDAP quota attribute", + "subtext": "This is the attribute name that will be looked up from LDAP to determine quota for a user." + }, + "billingPromptUrl": { + "label": "Billing prompt url", + "subtext": "This is the url that will be used in the billing prompt." + }, + "saveButton": "Save", + "restoreButton": "Restore defaults" + } + } + }, + "people": { + "title": "People" + }, + "sharingLinks": { + "title": "Sharing Links" + }, + "apps": { + "title": "Apps", + "appList": { + "uninstallingHint": "Done uninstalling", + "doneUninstalling": "Done uninstalling", + "uninstallHint": "Uninstall an app", + "uninstallButton": "Uninstall...", + "uploadApp": "Upload app...", + "searchHint": "Search", + "search": "search", + "mostUsed": "Most used", + "allApps": "All apps", + "install": "Install...", + "fromMarket": "from app market", + "uninstall": "Uninstall", + "noMatchApp": "You have no installed apps with that name. Try searching on the app market »", + "unauthorized": "Unauthorized! :(", + "unauthorizedText": "This is a private Sandstorm server. In order to install apps, you need to be invited by the admin. The admin can invite you from the admin panel.", + "intro": "Welcome!
Create documents, chat rooms, blogs, and more.

Get started by installing an app.", + "doneButton": "Got it" + }, + "install": { + "sandstormAppInstallPage": { + "title": "Install app", + "error": { + "title": "Failed to install app", + "retryButton": "Try Again" + }, + "stepWait": { + "title": "Waiting for write access..." + }, + "stepDownload": { + "title": "Downloading...", + "cancelButton": "Cancel" + }, + "stepVerify": { + "title": "Verifying..." + }, + "stepUnpack": { + "title": "Unpacking..." + }, + "stepAnalyze": { + "title": "Analyzing..." + }, + "stepConfirm": { + "upgrade": { + "explanation": "You have an older version of this app installed. Do you want to upgrade?", + "button": "Upgrade %s" + }, + "downgrade": { + "explanation": "You already have a newer version of this app installed. Are you sure you want to revert to this older version?", + "button": "Downgrade %s" + }, + "install": { + "button": "Install %s" + } + }, + "stepRun": { + "title": "%s installed", + "explanation": "Installation complete.", + "appDetailsLink": "Go to %s" + }, + "stepDelete": { + "title": "Deleting", + "explanation": "Server is currently deleting this app..." + }, + "stepFailed": { + "title": "Failed", + "explanation": "Installation failed: %s" + } + } + }, + "appDetails": { + "sandstormAppDetailsPage": { + "newerVersion": { + "explanation": "Some of your files were made with a newer version of this app. They will keep using the newer version, as going backwards could break them." + }, + "olderVersion": { + "explanation": "Some of your grains were made with an older version of this app. Upgrade them?", + "upgradeButton": "Upgrade Grains" + }, + "search": { + "hint": "Search", + "placeholder": "search" + }, + "trash": { + "explanation": "Grains will be permanently removed after 30 days in the trash. To keep a grain, restore it to the Main list." + }, + "noGrains": { + "notFound": "No matching grains found.", + "inTrash": "Some grains in your trash match your search.", + "trashButton": "View trash" + } + }, + "sandstormAppDetails": { + "websiteLink": "Website", + "appMarketLink": "App market", + "sourceCodeLink": "Source", + "bugReportLink": "Report issue", + "mainListButton": "View main list", + "trashButton": "View trash", + "uninstallButton": "Uninstall", + "restoreButton": "Restore grain backup...", + "version": { + "label": "Version" + }, + "lastUpdate": { + "label": "Last Updated", + "unknown": "" + }, + "publisher": { + "label": "Signed by" + }, + "hasFingerprint": "The app publisher has proven using PGP that they control these accounts.", + "noFingerprint": "This app has no signature from its creator; its author cannot be verified." + } + } + }, + "accounts": { + "title": "Account settings", + "accountSettings": { + "sandstormAccountSettings": { + "title": "Account", + "identities": { + "title": "My Profile", + "success": "Success: %s", + "linkedCredentials": "Linked credentials", + "linkNewIdentity": { + "title": "Link new credential:", + "cancelButton": "Cancel", + "linkButton": "Link new credential", + "logoutAllButton": "Log out all other sessions" + }, + "email": { + "title": "Primary e-mail address for service-related notifications", + "primary": "Primary", + "primaryButton": "Set as primary", + "notFound": " No verified emails! ", + "addNew": "Add new e-mail address" + } + }, + "billing": { + "title": "Billing" + }, + "deleteAccount": { + "title": "Delete account", + "button": "Delete your account" + }, + "deletePopup": { + "title": "Delete your account", + "explanation": "You are about to mark your account for deletion. Once marked for deletion, your account will be suspended, and you will have 7 days to cancel the pending deletion by logging back into your account.", + "results": "After 7 days, your account will be permanently deleted. Deleting your account will:", + "result1": "Permanently delete any grains you created", + "result2": "Revoke all sharing links you created", + "result3": "Remove you from all users' contact lists", + "result4": "Delete all credentials owned by your account (except credentials also associated with another account).", + "confirm": "Please type \"delete my account\" below to confirm.", + "goodbye": "We're sorry to see you go. Feel free to share any feedback you have with the server admin.", + "feedbackPlaceholder": "Optional", + "deleteButton": "Delete account", + "cancelButton": "Cancel" + } + }, + "sandstormAccountsFirstSignIn": { + "title": "Confirm your profile", + "success": "Success: %s" + }, + "accountSuspended": { + "title": "This account has been suspended by you.", + "deletedIn": "This account will be deleted in %s. Would you like to cancel deletion and restore this account?", + "suspended": "This account is suspended and all of its grains and shares are disabled. Would you like to restore this account?", + "restoreButton": "Restore account", + "logoutButton": "Logout" + }, + "_accountProfileEditor": { + "picture": { + "label": "Profile picture:", + "uploadButton": "Upload new picture", + "subtext": "This picture will be shown to other users to help identify you.", + "maxSize": "512x512px, 64KiB max." + }, + "fullName": { + "label": "Full name:", + "placeholder": "full name", + "subtext": "Your regular first and last name, as you would like it displayed to others. This does not have to be your real name." + }, + "handle": { + "label": "Handle:", + "placeholder": "handle", + "hint": "Handles must start with a lower-case letter and contain only lower-case letters, digits, and underscores.", + "subtext": "To be displayed in apps that use handles. Your handle must start with a letter and contain only lower-case letters, digits, and underscores." + }, + "emailList": { + "label": "E-mail:" + }, + "pronoun": { + "label": "Preferred pronoun:", + "neutral": "they (unspecified)", + "male": "he/him (male)", + "female": "she/her (female)", + "robot": "it (robot)" + }, + "agreedToTerms": { + "agreeTo": " I have read and agree to the", + "termsOfServiceLink": "Terms of Service", + "and": " and ", + "privacyLink": "Privacy policy" + }, + "saveButton": "Save", + "continueButton": "Continue", + "cancelButton": "Cancel" + } + }, + "loginButtons": { + "icon": { + "info": "i" + }, + "loginButtons": { + "createButton": "Create account", + "signInButton": "Sign in" + }, + "accountButtons": { + "loading": "Loading..." + }, + "_loginButtonsLoggedInDropdown": { + "revealIdentity": "Reveal identity", + "title": "Account", + "sendFeedback": "Send feedback", + "referralProgram": "Referral program", + "signOutButton": "Sign out" + }, + "_loginButtonsLoggedOutDropdown": { + "demo": { + "title": "Create account", + "explanation": "WARNING: Your demo data will be deleted." + }, + "title": "Sign in", + "shared": { + "explanation": "Sign in so that collaborators know who you are." + }, + "signInButton": "Sign in", + "anonymousButton": "Stay anonymous" + }, + "oauthLoginButton": { + "with": "with " + }, + "devLoginForm": { + "label": "with a Dev account", + "hint": "unexpand", + "alice": "Alice (admin)", + "bob": "Bob", + "carol": "Carol", + "dave": "Dave", + "customPlaceholder": "Eve", + "customButton": "Custom" + }, + "loginButtonsList": { + "configure": "configure login", + "troubleshooting": "troubleshooting", + "about": "about Sandstorm" + }, + "emailLoginForm": { + "description": "with e-mail", + "sendButtonText": "send Login Email" + }, + "emailAuthenticationForm": { + "hint": "Passwordless E-mail Login allows you to log in using an e-mail address. No password is required; instead, every time you log in, we send you a new email confirmation code. You will only need to log in once per device.", + "token": { + "explanation": "We've sent a login e-mail to %s. It may take a few moments to show up in your inbox.", + "label": "Enter your token:", + "confirmButton": "Confirm", + "cancelButton": "Cancel" + }, + "disabled": "A server admin must enable email authentication before you can confirm your email." + }, + "ldapLoginForm": { + "username": { + "label": "username", + "hint": "This is your LDAP username. It will be the name that you normally use to log in to other internal services at your company." + }, + "password": { + "label": "password", + "hint": "This is your LDAP password. It will be the password that you normally use to log in to other internal services at your company." + }, + "loginButton": "Log in" + }, + "_loginButtonsSeparator": { + "or": "or" + } + }, + "identity": { + "identityLoginInterstitial": { + "title": "Logging in...", + "loading": "loading...", + "logoutButton": "Log out", + "cancelButton": "Cancel", + "goBackButton": "Go back", + "create": "creating account...", + "createFailed": "Failed to create account.", + "loginAccount": "logging in to account...", + "loginAccountFailed": "Account login failed", + "loginToken": "logging back in to account...", + "loginTokenFailed": "Failed to resume session.", + "link": "linking credential to account...", + "success": "Unlinked credential from %s", + "explanation": "You have authenticated as this credential", + "warning": "but that is not a login credential for any account.", + "moreIdentities": "The following credentials can log in to your credential's accounts:", + "unlinkButton": { + "hint": "Unlink your credential from this account.", + "text": "unlink" + }, + "unlink": { + "explanation": "Are you sure you want to unlink your credential from the account of %s?", + "unlinkButton": "Unlink", + "cancelButton": "Cancel" + } + }, + "identityManagementButtons": { + "toggleLogin": { + "label": "Allow this credential to log in to your account.", + "unlinkButton": "Unlink" + } + }, + "loginIdentitiesOfLinkedAccounts": { + "show": { + "explanation": "This credential is shared with other accounts. Those accounts have the following login credentials:", + "unlinkButton": "unlink", + "hideButton": "hide other accounts" + }, + "hide": { + "explanation": "This credential is shared with at least one other account.", + "showButton": "show other accounts" + } + }, + "identityCardSignInButton": { + "hint": "sign in as %s", + "title": "Sign in" + }, + "accountCardSignInButton": { + "reSign": "To sign out of your current account and sign in as this user, choose how to sign in:", + "howToSignIn": "Choose how to sign in:" + } + }, + "tokenTemplates": { + "_emailTokenError": { + "title": "Invalid authentication code. If it has been more than 15 minutes, the token has expired, otherwise you may have simply mistyped it." + }, + "_emailLinkIdentityError": { + "title": "To confirm your email address, you must be logged in as the account that created this link." + }, + "addNewVerifiedEmailPowerboxConfiguration": { + "email": { + "placeholder": "enter email address", + "selectButton": "Select", + "sendButton": "Send confirmation email" + }, + "sendingTo": "Sending to %s", + "resetButton": "Try a different address", + "token": { + "placeholder": "enter your token", + "confirmButton": "Confirm" + }, + "verifying": "Verifying token..." + } + } + }, + "wizard": { + "setupWizardLoading": { + "loading": "Loading..." + }, + "setupWizardProgressBar": { + "identityProviders": "Login providers", + "organization": "Organization", + "email": "Email", + "preinstalledApps": "Pre-installed apps", + "adminAccount": "Admin account" + }, + "setupWizardHelpFooter": { + "needHelp": "Need help?", + "documentation": "Documentation", + "emailSupport": "Email support", + "systemLog": "System Log" + }, + "setupWizardSystemLog": { + "header": { + "label": "System log", + "downloadButton": "Download log" + }, + "permissionDenied": "You cannot view the system log because you are not logged in as an admin and you do not have a setup token." + }, + "setupWizardIntro": { + "title": "Welcome to Sandstorm!", + "revisitWizardLink": "Revisit setup wizard", + "noIdpEnabled": { + "explanation": "This Sandstorm server has been set up previously, but due to a change in sandstorm.conf, you'll need to configure login providers again." + }, + "idpEnabled": { + "explanation": "This Sandstorm server is ready to roll. You can adjust server settings, including which providers are enabled and how Sandstorm sends email.", + "turnUserIntoAdmin": "You can also turn an existing user into an administrator.", + "isAdmin": { + "adminPanelLink": "Proceed to admin panel", + "suButton": "Give yourself admin privileges " + }, + "isNotAdmin": { + "explanation": "To make an account into an admin account, please sign in:", + "signInLabel": "Sign in", + "signInButton": "Sign in to become admin" + } + }, + "setupButton": "Begin Sandstorm Setup" + }, + "setupWizardIdentity": { + "title": "Login providers", + "explanation1": "To use Sandstorm, you need to create a user account. Every user account on Sandstorm is backed by an login provider. You'll use this login provider to authenticate as the first administrator of this Sandstorm install.", + "explanation2": "Configure the login provider or providers you wish to enable.", + "nextButton": "Next", + "backButton": "Back" + }, + "setupWizardOrganization": { + "title": "Organization settings", + "error": "Failed to save change: %s", + "membership": { + "title": "Organization membership", + "emailToggle": { + "label": "Users authenticated via email address", + "subtext": "Note: disabled because email login is not configured." + }, + "emailDomain": { + "label": "Domain:", + "subtext": "Users with an email address at this domain will be members of this server's organization." + }, + "gappsToggle": { + "label": "Users authenticated via Google Apps for Work", + "subtext": "Note: disabled because Google login is not configured." + }, + "gappsDomain": { + "label": "Domain:", + "subtext": "Users with a Google Apps for Work account under this domain will be members of this server's organization." + }, + "ldapToggle": { + "label": "Users authenticated via LDAP", + "subtext": "Note: disabled because LDAP login is not configured." + }, + "samlToggle": { + "label": "Users authenticated via SAML", + "subtext": "Note: disabled because SAML login is not configured." + } + }, + "settings": { + "title": "Organization settings", + "disallowGuests": { + "label": "Disallow collaboration with users outside the organization.", + "subtext": "Users will be required to log in as a member of your organization to view sharing links. Guest access will be disabled." + }, + "shareContacts": { + "label": "Make all organization users visible to each other", + "subtext": "This setting automatically adds users within the organization to each other's contact list so that they can share grains with each other. Disable this if you have some users whose identity should stay hidden from other users." + } + }, + "saveButton": "Save and continue", + "backButton": "Back" + }, + "setupWizardEmailConfig": { + "title": "Email delivery", + "explanation": "Sandstorm needs a way to send email. You can skip this step (unless you're using email login), but email-related features will be unavailable until you configure email in the future.", + "moreDetail": "How Sandstorm uses email: Sandstorm sends email notifications, and Sandstorm apps can send email notifications, too. Every app receives a unique email address, so Sandstorm needs to send email from a variety of \"From:\" addresses. Therefore, Gmail SMTP won't work, but there are other free services. See more info in the docs.", + "error": "Failed to save changes: %s", + "hostPort": { + "host": "SMTP host", + "port": "Port", + "subtext": "Use port 25 for SMTP (unencrypted or with StartTLS), port 465 for TLS-encrypted SMTPS." + }, + "username": { + "label": "Username (optional)" + }, + "password": { + "label": "Password (optional)" + }, + "email": { + "label": "Sandstorm server's own email address", + "subtext": "Sandstorm will send login emails, notifications of granted access requests, and other emails from this address. It will also use this address in the SMTP envelope." + }, + "saveButton": "Save and continue", + "skipButton": "Skip for now", + "testButton": "Test", + "backButton": "Back" + }, + "setupWizardPreinstalled": { + "title": "Pre-installed Apps Setup", + "explanation": "Please wait while Sandstorm installs the following Productivity Suite apps that are useful for most users. You will be able to configure all pre-installed apps in the Admin Settings panel after setup.", + "downloaded": "Downloaded", + "failed": "Failed", + "loading": "Please wait, loading app index...", + "nextButton": "Next", + "skipButton": "Skip for now", + "backButton": "Back" + }, + "setupWizardLoginUser": { + "title": "Create admin account", + "firstLogin": { + "title": "Confirm your profile" + }, + "isAdmin": "Great! Your account has admin privileges.", + "hasAdmin": { + "explanation": "This Sandstorm server already has an admin user, but if you want, you can also make yourself an admin.", + "adminButton": "Become an admin" + }, + "makeYouAnAdmin": "Making you an admin on this server...", + "loggedOut": { + "explanation": "You can now create an admin account on this Sandstorm server.", + "description": "Log in to create your admin account", + "dialogLabel": "Create account" + }, + "finishButton": "Finish", + "backButton": "Back" + }, + "setupWizardSuccess": { + "title": "Ready to roll!", + "serverIsReady": "Your Sandstorm server is now ready to use.", + "whatsNext": "What would you like to do next?", + "addUsersLink": "Add users", + "editSettingsLink": "Edit other settings", + "sandstormLink": "Start using Sandstorm", + "backButton": "Back" + }, + "setupWizardVerifyToken": { + "title": "Verifying token...", + "explanation": "Sorry, it looks like your setup token has expired.", + "howToFix": "Generate a new one now from the command line by running sandstorm admin-token to access the setup wizard." + }, + "setupWizardTokenExpired": { + "title": "Setup token required", + "alreadySetup": "This server is already set up, so we recommend administering it via the main", + "adminRootLink": "administration panel", + "explanation": "To use this server's setup page, you need a valid setup token.", + "howToFix": "Generate a new one now from the command line by running sandstorm admin-token and following the link it outputs." + } + }, + "packages": { + "topbar": { + "updated": "Sandstorm has been updated — Click here to reload", + "apps": "Apps", + "grains": "Grains", + "oasis": "Start collaborating with others by using Sandstorm on Oasis:", + "createAccount": "Create free account »", + "demoHint": "WARNING: Your demo data will be deleted.", + "selfHostHint": "This is a limited-time demo. If you want to use Sandstorm for real, install it on your own server (it's open source):", + "signUp": "Demo time remaining:", + "close": "Close" + }, + "powerbox": { + "title": "Powerbox request", + "inputToken": "Please input an api token:", + "importToken": "Import token", + "selected": "Selected:", + "selectOne": "Select one:", + "noGrain": "No grains can provide the requested interface.", + "loading": "Loading..." + } + } +}