Upgrade mobile UX to Oasis 0.9.0

Rebase onto upstream 0.9.0. Mobile topbar (logo->home, avatar->profile),
hexagon category nav (hive) and bottom bar; remove the six top-bar
buttons (inbox/pm/publish/search/graphos/peers) that cluttered the header.
Theme OasisMobileUX carries topbar/hexagon/bottombar styles.
This commit is contained in:
s1to 2026-08-01 13:41:09 +02:00
parent de36b38851
commit 8d21216362
69 changed files with 8974 additions and 820 deletions

View file

@ -1,26 +1,6 @@
const { a, em, strong } = require('../../../server/node_modules/hyperaxe');
module.exports = {
es: {
bbAdd: "Añadir",
bbQuickActions: "Acciones rápidas",
bbPickTitle: "Fijar un módulo",
bbPickDesc: "Elige un módulo para el hueco + de la barra inferior.",
bbPickNone: "Ninguno",
bbManage: "Editar",
bbYourBar: "Tu barra",
bbRemove: "Quitar",
bbFull: "Máximo alcanzado",
bbDone: "Hecho",
activityChangeFilter: "Cambiar filtro",
emptyConnectHint: "Conéctate a un pub para sincronizar con la red.",
emptyConnectCta: "Conéctate a un pub",
menuCommunity: "Comunidad",
activityGroupCommunity: "Comunidad y Gobernanza",
activityGroupOrg: "Organización",
activityGroupComm: "Comunicación",
activityGroupEconomy: "Economía",
activityGroupMedia: "Contenido y Media",
activityGroupOther: "Otros",
languageName: "Castellano",
shopOrderStatusPaid: "Pago recibido",
shopOrderStatusReceived: "Recibido",
@ -419,7 +399,8 @@ module.exports = {
publish: "Publicar",
contentWarningPlaceholder: "Añade un título a tu post (opcional)",
privateWarningPlaceholder: "Añade habitantes para enviar un post privado (opcional)",
publishWarningPlaceholder: "...",
publishWarningPlaceholder: "Cuerpo limitado a 7000 caracteres.",
publishTooLong: "Tu publicación es demasiado larga. Acórtala, por favor.",
publishCustomDescription: [
"RECUERDA: Debido a la tecnología blockchain, una vez has publicado algo, no puede ser editado ni borrado. Piénsalo bien!.",
],
@ -484,7 +465,89 @@ module.exports = {
passwordLengthInfo: "La contraseña debe tener mínimo 32 caracteres de longitud.",
passwordImport: "Escribe tu contraseña para descifrar los datos que serán guardados en tu sistema (nombre: secret)",
exportPasswordPlaceholder: "Utiliza minúsculas, mayúsculas, números y símbolos",
fileInfo: "Tu secreto cifrado será guardado en tu sistema (nombre: oasis.enc)",
fileInfo: "Tu secreto cifrado se descargará en tu dispositivo (nombre: oasis.enc)",
developer: "Desarrollo",
devTitle: "Desarrollo",
welcomeBannerText: "Bienvenida a OASIS. Sigue estos pasos rápidos para configurar tu avatar.",
welcomeBannerAction: "¡Empezar!",
welcomeTitle: "Bienvenida",
welcomeStepGreetingAction: "Enviar feed",
welcomeJoinPubButton: "Unirse al pub",
welcomeStepLarpAction: "Unirse a \"La Academia\"",
welcomeStepLarpText: "Únete a nuestro juego de rol de acción real.",
welcomeStepLarpTitle: "Únete al L.A.R.P.",
welcomeStepGreetingTitle: "Envía un \"Hola mundo!\"",
welcomeStepGreetingText: "Envía un mensaje para que otros habitantes puedan descubrirte.",
welcomeJoinPub: "Unirse a",
welcomeDescription: "Unas pocas cosas que conviene hacer antes de empezar.",
welcomeProgress: "Completado",
welcomeStepDone: "hecho",
welcomeStepPending: "pendiente",
welcomeSkip: "Ahora no",
welcomeStepLanguageTitle: "Elige tu idioma",
welcomeStepLanguageText: "Oasis habla varios idiomas. Puedes cambiarlo cuando quieras.",
welcomeStepProfileTitle: "Edita tu perfil",
welcomeStepProfileText: "Elige un nombre, añade una descripción y pon una imagen para que el resto de habitantes te reconozca.",
welcomeStepProfileAction: "Guardar perfil",
welcomeStepFederationTitle: "Únete a la red principal",
welcomeStepFederationText: "Conéctate a nuestro pub para encontrar a otros habitantes y empezar a replicar.",
welcomeStepFederationAction: "Ir a invitaciones",
welcomeStepBackupTitle: "Copia de seguridad de tu ID",
welcomeStepBackupText: "Tu identidad es un fichero de claves en este dispositivo.",
welcomeStepBackupWarning: "SI LO PIERDES, NADIE PUEDE RECUPERARLO POR TI.",
welcomeStepBackupAction: "¡Copia de seguridad!",
welcomeCompleteTitle: "Todo listo.",
welcomeCompleteText: "Tu nodo está preparado. A partir de aquí la red crece con la gente a la que sigues.",
welcomeFindPeople: "Buscar habitantes",
devFilterFiles: "FICHEROS",
devFilterSearch: "BUSCAR",
devFilterModules: "MÓDULOS",
devFilterTranslations: "TRADUCCIONES",
devFilterStyles: "ESTILOS",
devFilterTests: "TESTS",
devVersion: "Versión",
devNodeVersion: "Node",
devStatsTests: "Suites de tests",
devParentFolder: "Carpeta superior",
devOpenFolder: "abrir",
devDescription: "Explora el código que se está ejecutando en este nodo.",
devTreeTitle: "Ficheros",
devSearchTitle: "Buscar en el código",
devMapTitle: "Módulos",
devRoot: "raíz",
devRootButton: "RAÍZ",
devSearchPlaceholder: "Texto a buscar en el código",
devAnyExtension: "Cualquier fichero",
devSearchButton: "Buscar",
devStatsFiles: "Ficheros",
devStatsLines: "Líneas",
devStatsModules: "Módulos",
devStatsLanguages: "Idiomas",
devNotViewable: "no visualizable",
devEmptyFolder: "Esta carpeta está vacía.",
devSize: "Tamaño",
devShowing: "Mostrando",
devLine: "línea",
devReportBug: "Reportar Bug",
devCreateTask: "Crear Tarea",
devRaw: "RAW",
devReportContext: "Encontrado leyendo el código de Oasis",
devTaskPrefix: "Revisar",
devPrevPage: "Líneas anteriores",
devNextPage: "Líneas siguientes",
devMatches: "coincidencias",
devFilesScanned: "ficheros revisados",
devNoResults: "Todavía no hay coincidencias.",
devColModule: "Módulo",
devColState: "Estado",
devColModel: "Modelo",
devColView: "Vista",
devColRoutes: "Rutas",
devColTests: "Tests",
devOn: "activo",
devOff: "inactivo",
modulesDevLabel: "Desarrollo",
modulesDevDescription: "Módulo para gestionar el código de Oasis.",
themeIntro:
"Elige un tema.",
setTheme: "Establecer tema",
@ -682,7 +745,7 @@ module.exports = {
spreadLabel: "Difundir",
spreadHint: "Difunde esto a quienes te apoyan (se replica vía tu feed).",
welcomePmSubject: "Hello World!",
welcomePmBody: "Bienvenido a Oasis — una red social libre, peer-to-peer, federada y cifrada, con una arquitectura distribuida y solo por invitación.\n\nAlgunos lugares interesantes para empezar:\n\n- /profile — Edita tu avatar, nombre, descripción y qué módulos se muestran en tu cara pública.\n- /invites — Añade un pub para federarte con el resto de la red.\n- /peers — Mira quién está conectado, reescanea tu LAN, exporta o importa listas de peers.\n- /inhabitants — Descubre y visita los avatares de otras personas.\n- /tribes — Crea o únete a grupos privados con cifrado de extremo a extremo.\n- /inbox — Lee y envía mensajes privados.\n- /activity — Mira la actividad reciente, tuya y de tu red.\n- /publish — Escribe un post o comparte una imagen, audio, vídeo o documento.\n\nAlgunos lugares interesantes para conectar:\n\n- /fediverse — Gestiona tus otras cuentas del fediverso, incluyendo enviar y recibir contenido.\n\nEste mensaje se envió de forma privada desde ti hacia ti, por eso no hizo falta conexión para recibirlo.",
welcomePmBody: "Bienvenido a Oasis — una red social libre, peer-to-peer, federada y cifrada, con una arquitectura distribuida y solo por invitación.\n\nAlgunos lugares interesantes para empezar:\n\n- /profile — Edita tu avatar, nombre, descripción y qué módulos se muestran en tu cara pública.\n- /invites — Añade un pub para federarte con el resto de la red.\n- /peers — Mira quién está conectado, reescanea tu LAN, exporta o importa listas de peers.\n- /inhabitants — Descubre y visita los avatares de otras personas.\n- /tribes — Crea o únete a grupos privados con cifrado de extremo a extremo.\n- /inbox — Lee y envía mensajes privados.\n- /activity — Mira la actividad reciente, tuya y de tu red.\n- /publish — Escribe un post o comparte una imagen, audio, vídeo o documento.\n- /search — Busca el contenido de la red por tipo.\n\nAlgunos lugares interesantes para conectar:\n\n- /fediverse — Gestiona tus otras cuentas del fediverso, incluyendo enviar y recibir contenido.\n\nEste mensaje se envió de forma privada desde ti hacia ti, por eso no hizo falta conexión para recibirlo.",
profileVisibilityTitle: "Visibilidad del perfil público",
profileVisibilityHint: "Marca qué campos ven otros habitantes en tu perfil. Por defecto solo se muestra Karma.",
profileSensorsSectionTitle: "Sensores",
@ -1214,6 +1277,9 @@ module.exports = {
eventButton: "EVENTOS",
taskButton: "TAREAS",
votesButton: "GOBIERNO",
industryButton: "INDUSTRIA",
projectButton: "PROYECTOS",
shopProductButton: "PRODUCTOS",
reportButton: "INFORMES",
feedButton: "FEED",
marketButton: "MERCADO",
@ -1242,7 +1308,7 @@ module.exports = {
trendingItemStatus: "Estado del Artículo",
trendingTotalVotes: "Total de Votos",
trendingTotalOpinions: "Total de Opiniones",
trendingNoContentMessage: "No hay tendencias disponibles, aún.",
trendingNoContentMessage: "Todavía no hay tendencias.",
trendingAuthor: "Por",
trendingCreatedAtLabel: "Creado el",
trendingTotalCount: "Total de Contadores",
@ -1431,7 +1497,7 @@ module.exports = {
transfersCreatedAt: "Creado el",
transfersConfirmations: "CONFIRMACIONES",
transfersContainingBlock: "Bloque contenedor",
transfersExportContract: "Crear contrato",
transfersExportContract: "Contrato inteligente",
transfersConfirmButton: "Confirmar Transferencia",
transfersNoItems: "No se encontraron transferencias.",
transfersMineSectionTitle: "Tus Transferencias",
@ -1557,7 +1623,7 @@ module.exports = {
cvDeleteButton: "Eliminar",
cvNoCV: "No se encontró ningún CV.",
blogSubject: "Asunto",
blogMessage: "Cuerpo limitado a 8096 caracteres.",
blogMessage: "Mensaje",
blogImage: "Subir contenido multimedia (max: 50MB)",
blogPublish: "Vista previa",
noPopularMessages: "No se han publicado mensajes populares, aún",
@ -2193,6 +2259,7 @@ module.exports = {
agendaFilterReports: "INFORMES",
agendaFilterTransfers: "TRANSFERENCIAS",
agendaFilterJobs: "TRABAJOS",
agendaFilterIndustry: "INDUSTRIA",
agendaFilterProjects: "PROYECTOS",
agendaFilterCalendars: "CALENDARIOS",
agendaNoItems: "No se encontraron asignaciones.",
@ -2314,16 +2381,31 @@ module.exports = {
privateMessage: "MP",
pmSendTitle: "Mensajes Privados",
pmSend: "Enviar!",
pmDescription: "Usa este formulario para enviar un mensaje cifrado a otros habitantes.",
pmCancel: "Cancelar",
pmReset: "Restablecer",
pmSharedKeyHint: "Comparte esta clave con el destinatario por otro canal. Es necesaria para descifrar.",
pmDescription: "Usa este formulario para enviar un mensaje/fichero cifrado a otros habitantes.",
pmComposeTitle: "Enviar un mensaje",
pmRecipients: "Destinatarios",
pmRecipientsHint: "Introduce los IDs de Oasis separados por comas",
pmLevelOfExposition: "Level of exposition",
pmLimitsHint: "Up to 7 recipients per message. Body capped at 8096 characters.",
pmLimitsHint: "Hasta 7 destinatarios por mensaje.",
pmTextPlaceholder: "Cuerpo limitado a 7000 caracteres.",
pmSubject: "Asunto",
pmSubjectHint: "Introduce el asunto del mensaje",
pmText: "Mensaje",
pmCrypterChip: "2xE2E",
pmCrypterDecryptButton: "Descifrar",
fileShareTitle: "Compartir un fichero",
fileShareRecipientPlaceholder: "@...=.ed25519",
fileShareFileLabel: "Fichero",
fileShareDownload: "Descargar",
fileShareMutualError: "Solo puedes compartir ficheros con habitantes que te apoyen mutuamente.",
fileShareNoFile: "No se ha seleccionado ningún fichero.",
fileShareTooLarge: "El fichero supera el tamaño permitido.",
fileShareFailed: "No se pudo preparar el fichero.",
fileShareSendError: "No se pudo enviar el fichero.",
fileShareUnavailable: "Este fichero no está disponible ahora mismo. Inténtalo más tarde.",
pmCrypterBadKey: "¡La clave compartida es incorrecta!",
pmCrypterTooLong: "El mensaje es demasiado largo para cifrarlo con el Crypter. Acórtalo e inténtalo de nuevo.",
pmCrypterCipherLabel: "Mensaje recifrado",
@ -2352,15 +2434,27 @@ module.exports = {
pmNoSubject: "(sin asunto)",
pmSubjectLabel: "Asunto:",
pmBodyLabel: "Cuerpo",
pmBotJobs: "42-EmpleosBOT",
pmBotProjects: "42-ProyectosBOT",
pmBotMarket: "42-MercadoBOT",
pmBotJobs: "JobsBot",
pmBotProjects: "ProjectsBot",
pmBotMarket: "MarketBot",
pmBotShops: "ShopsBot",
pmBotPolitical: "PoliticalBot",
politicalBotLarpTitle: "La casa gobernante del L.A.R.P ha cambiado.",
politicalBotParliamentTitle: "Ha comenzado un nuevo ciclo de gobierno en el Parlamento.",
politicalBotTribeTitle: "Ha comenzado un nuevo ciclo de gobierno en una de tus Tribus.",
politicalBotLarpIntro: "Ahora gobierna {house} durante este ciclo: {cycle}",
politicalBotParliamentIntro: "El gobierno actual es {gov}",
politicalBotParliamentIntroLeader: "El gobierno actual es {gov} ejercida por {leader}",
politicalBotTribeIntro: "El gobierno actual en la Tribu {tribe} es {gov}",
politicalBotTribeIntroLeader: "El gobierno actual en la Tribu {tribe} es {gov} ejercida por {leader}",
politicalBotLeaderLabel: "Líder",
inboxJobSubscribedTitle: "Nueva suscripción a tu oferta de trabajo",
pmInhabitantWithId: "Habitante con ID OASIS:",
pmHasSubscribedToYourJobOffer: "se ha suscrito a tu oferta de trabajo",
inboxProjectCreatedTitle: "Nuevo proyecto creado",
pmHasCreatedAProject: "ha creado un proyecto",
inboxMarketItemSoldTitle: "Artículo vendido",
inboxShopSoldTitle: "Producto vendido",
pmYourItem: "Tu artículo",
pmHasBeenSoldTo: "se ha vendido a",
pmFor: "por",
@ -2393,7 +2487,7 @@ module.exports = {
blockchainBack: 'Volver al Blockexplorer',
banking: 'Banking',
bankingTitle: 'Banking',
bankingDescription: 'Explora el valor actual de ECOin y la asignación de RBU correspondiente, distribuida semanalmente en función de la participación y la confianza.',
bankingDescription: "La economía de ECOin: balance, RBU, tasas y valor de industria.",
bankOverview: 'Resumen',
bankEpochs: 'Épocas',
bankRules: 'Reglas',
@ -2427,6 +2521,10 @@ module.exports = {
bankEpochId: 'ID de época',
bankRuleHash: 'Hash del snapshot de reglas',
bankViewEpoch: 'Ver época',
bankYourIndustryBalance: "Tu parte de la industria",
bankYourUbiMonth: "Tu RBU (este mes)",
bankYourFundsMonth: "Tus fondos (este mes)",
bankIndustryBalance: "Producción industrial (estimada)",
bankUserBalance: 'Tu saldo',
ecoWalletNotConfigured: 'Cartera de ECOin no configurada',
editWallet: 'Editar cartera',
@ -2466,7 +2564,7 @@ module.exports = {
pubIdPlaceholder: "@PUB_ID.ed25519",
bankUbiAvailableNo: "SIN FONDOS!",
bankUbiAvailableOk: "¡DISPONIBLE!",
bankUbiAvailability: "Disponibilidad de UBI",
bankUbiAvailability: "RBU (red)",
bankAlreadyClaimedThisMonth: "Ya reclamado este mes",
bankUbiThisMonth: "UBI (este mes)",
bankUbiLastClaimed: "UBI (última reclamada)",
@ -2896,6 +2994,208 @@ module.exports = {
jobsTagsLabel: "Etiquetas",
jobsTagsPlaceholder: "etiqueta1, etiqueta2, etiqueta3",
noJobsMatch: "No hay ofertas que coincidan con tu búsqueda.",
industrySearchPlaceholder: "Buscar fábricas…",
industryAllSectors: "Todos los sectores",
industryVisitButton: "Visitar Industria",
industryAdvanceTo: "Cambiar a",
industryAmount: "Cantidad",
industryApproveBuild: "Aprobar",
industryBackToFacility: "← Fábrica",
industryBlueprint: "Blueprint",
industryBlueprintLabel: "Blueprint de Industria",
industryBlueprints: "Blueprints",
industryBuild: "Build",
industryBuildNotes: "Notas",
industryBuildStart: "Fecha de inicio",
industryVoteUpdateButton: "Votar actualización",
industryVoteDeleteButton: "Votar borrado",
industryRevokeVote: "Revocar",
industryTimeLeft: "Tiempo restante",
industryBuildEnd: "Fecha de fin",
industryBuilds: "Builds",
industryBuildTitle: "Título",
industryContribute: "Contribuir",
industryContributeEco: "Contribuir ECO",
industryContributeLabor: "Contribuir trabajo",
industryContributeButton: "Contribuir",
industryContributeMaterial: "Contribuir material",
industryContributions: "Contribuciones",
industryContributors: "colaboradores",
industryCreateBlueprintButton: "Crear blueprint",
industryDistribute: "Distribuir",
industryDistributeButton: "Distribuir por cuotas",
industryDistribution: "Distribución",
industryEcoAmount: "Cantidad (ECO)",
industryEcoContribHint: "Las contribuciones en ECO se transfieren al mayordomo como custodio de la tesorería del build.",
industryEditBlueprint: "Editar blueprint",
industryFacility: "Fábrica",
industryKindLabel: "Tipo",
industryKind_labor: "Mano de obra",
industryKind_material: "Material",
industryKind_eco: "Fondos",
industryLaborHours: "Mano de obra (horas)",
industryHours: "Horas",
industryLicense: "Licencia",
industryMaterialItem: "Material",
industryMaterials: "Materiales",
industryMaterialsHint: "Un material por línea, con el formato nombre:cantidad:precio.",
industryEstMaterials: "Total materiales",
industryEstLabor: "Total mano de obra",
industryEstTaxes: "Tasas",
industryEstTotal: "Precio estimado",
industryBuildingPrice: "Precio de construcción",
industryFinalPrice: "Precio final",
industryBlueprintDescPlaceholder: "Especificaciones, dimensiones, peso, documentación…",
industryMaterialValue: "Valor (ECO)",
industryMember: "Miembro",
industryNewBlueprint: "Nuevo blueprint",
industryNewBuild: "Proponer un build",
industryEditBuild: "Editar producción",
industryNoBlueprint: "— ninguno —",
industryNeedBlueprint: "Crea primero un plano: cada producción fabrica uno.",
industryNoBlueprints: "Aún no hay blueprints.",
industryNoBuilds: "Aún no hay builds.",
industryNote: "Nota",
industryOutput: "Salida",
industryOutputItem: "Nombre del producto",
industryOutputKind: "Tipo de producto",
industryOutputQty: "Unidades por producción",
industryOutputUnit: "Unidad de medida",
industryOutputValue: "Valor de salida (ECO, p. ej. de la venta)",
industryPayout: "Pago",
industryPoints: "Karma",
industryPostJob: "Crear Trabajo",
industryPot: "Bote",
industryProposeBuildButton: "Proponer build",
industryProposer: "Proponente",
industryAuthor: "Autor",
industrySellOnMarket: "Enviar al Mercado",
industrySendToProjects: "Crear Proyecto",
industryShare: "Cuota",
industryShares: "Cuotas",
industrySkills: "Habilidades",
industryTreasury: "Tesorería",
industryKind_physical: "Físico",
industryKind_digital: "Digital",
industryBuildStatus_PROPOSED: "PROPUESTO",
industryBuildStatus_REJECTED: "RECHAZADO",
industryBuildStatus_APPROVED: "APROBADO",
industryBuildStatus_STOCKING: "ABASTECIENDO",
industryBuildStatus_IN_PRODUCTION: "EN PRODUCCIÓN",
industryBuildStatus_COMPLETED: "COMPLETADO",
industryBuildStatus_FAILED: "FALLIDO",
pmBotIndustry: "IndustryBot",
industryBotAdmittedTitle: "Has sido admitido en una fábrica.",
industryBotApplicationTitle: "Nueva solicitud de ingreso en tu fábrica.",
industryBotInvitedTitle: "Has sido invitado a una fábrica.",
industryBotDissolvedTitle: "Una fábrica a la que perteneces ha sido disuelta.",
industryBotBuildApprovedTitle: "Un build ha sido aprobado.",
industryBotDistributedTitle: "Se ha distribuido la salida de un build.",
industryFilterRules: "REGLAS",
industryRulesTitle: "Reglas",
industryRulesIntro: "Industry permite a los habitantes poseer colectivamente los medios de producción: una Fábrica es un taller de la red que nadie posee de forma privada.",
industryRulesSteward: "El fundador es el mayordomo — un custodio, no un dueño: no puede vender, privatizar ni disolver la Fábrica en solitario.",
industryRulesMembership: "La política de membresía define cómo se une la gente: Abierta (entras al instante), Por voto (te admite el voto de los miembros) o Solo invitación (un miembro debe invitarte antes).",
industryRulesQuorum: "El quórum es el número mínimo de miembros que deben votar para que una decisión cuente, para que una Fábrica pequeña no la decida una sola persona.",
industryRulesMajority: "La mayoría es la fracción de votos necesaria para aprobar (0,5 = mitad, 1 = unanimidad); una decisión pasa cuando los SÍ alcanzan al menos max(quórum, miembros × mayoría).",
industryRulesDecisions: "Los miembros votan para admitir nuevos, aprobar builds y disolver la Fábrica; el mayordomo no puede saltarse estas decisiones colectivas.",
industryRulesBlueprints: "Los Blueprints son recetas libres (COPYLEFT) — las entradas (materiales, horas de trabajo, skills) y la salida (un bien físico o digital) — y cualquiera puede forkearlas.",
industryRulesBuilds: "Un Build es una orden de producción: PROPUESTO → APROBADO (por voto) → ABASTECIENDO → EN PRODUCCIÓN → COMPLETADO, y solo acepta contribuciones una vez aprobado.",
industryRulesContributions: "Los miembros aportan trabajo (horas), materiales (valor declarado en ECO) o ECO a un build; cada aporte gana karma.",
industryRulesLaborRate: "La tarifa de trabajo es el valor en ECO de una hora de trabajo en esta Fábrica; convierte horas en karma para comparar esfuerzo y capital de forma justa: karma = horas × tarifa + valor material + ECO.",
industryRulesShares: "Tu cuota en un build es tu karma ÷ karma total, y determina cuánto del valor de salida recibes.",
industryRulesDistribution: "Cuando una producción se completa, el steward reparte el fondo (los fondos de la producción más el valor de venta) entre quienes contribuyeron, en proporción a su participación.",
industryRulesTreasury: "Las aportaciones en ECO las custodia el mayordomo como tesorería del build hasta el reparto; todos los movimientos quedan registrados en la red y las disputas pueden ir a Courts.",
industryJobs: "Empleos",
industryNoJobs: "Aún no hay puestos.",
industryCreatePosition: "Crear puesto",
industryViewCV: "CV",
industryReportButton: "Reportar",
industryCreateTask: "Crear Tarea",
industryOpenDispute: "Abrir disputa",
industryMaterialsPlaceholder: "solar-panel:2:120\nbattery:1:80\nkit:1:15",
industryOutputUnitPlaceholder: "p. ej. unidad, kg, licencia",
industryOutputItemPlaceholder: "p. ej. robot",
industryOutputQtyPlaceholder: "p. ej. 5",
industrySkillsPlaceholder: "p. ej. soldadura, redes, instalación-solar",
industryCreateInvite: "Generar invitación",
industryPauseVotes: "Votos de estado",
industryTitle: "Industria",
industryDescription: "Módulo para gestionar los medios de producción de forma colectiva.",
industryLabel: "Industria",
typeIndustryBuild: "BUILD",
typeIndustryBlueprint: "BLUEPRINT",
typeIndustryAllocation: "DISTRIBUCIÓN",
typeIndustry: "INDUSTRIA",
modulesIndustryLabel: "Industria",
modulesIndustryDescription: "Módulo para gestionar los medios de producción de forma colectiva.",
industryFilterAll: "TODAS",
industryFilterMember: "MIEMBRO",
industryFilterBlueprints: "PLANOS",
industryFilterBuilds: "PRODUCCIONES",
industryFilterMine: "MÍAS",
industryFilterActive: "EN MARCHA",
industryFilterPaused: "PAUSADAS",
industryFilterDissolved: "DISUELTAS",
industryAllTitle: "Industria",
industryMemberTitle: "Fábricas en las que estoy",
industryMineTitle: "Mis fábricas",
industryActiveTitle: "En marcha",
industryPausedTitle: "Fábricas pausadas",
industryDissolvedTitle: "Fábricas disueltas",
industryNoFacilitiesFound: "No se encontraron fábricas.",
industryCreateFacility: "Crear fábrica",
industryMembers: "Miembros",
industryMemberBadge: "MIEMBRO",
industryName: "Nombre",
industryNamePlaceholder: "Nombre de la fábrica",
industryDescriptionLabel: "Descripción",
industryDescriptionPlaceholder: "¿Qué produce esta fábrica?",
industrySector: "Sector",
industryMembershipPolicy: "Política de membresía",
industryQuorum: "Quórum",
industryMajority: "Mayoría",
industryLaborRate: "Tarifa de trabajo",
industryCreateButton: "Crear fábrica",
industryUpdateButton: "Actualizar",
industrySteward: "Mayordomo",
industryStatusActive: "EN MARCHA",
industryStatusPaused: "PAUSADA",
industryStatusDissolved: "DISUELTA",
industryStatusLabel: "Estado",
industryJoinButton: "Unirse",
industryApplyButton: "Solicitar ingreso",
industryLeaveButton: "Salir",
industryInviteButton: "Invitar",
industryInvitePlaceholder: "@...=.ed25519",
industryInviteNeeded: "Necesitas una invitación para unirte.",
industryPauseButton: "Votar pausar",
industryResumeButton: "Votar reanudar",
industryEditButton: "Editar",
industryDeleteButton: "Eliminar",
industryBackToList: "← Industria",
industryPendingApplicants: "Solicitudes pendientes",
industryVotesYes: "sí",
industryVotesNo: "no",
industryAlreadyVoted: "votado",
industryAdmit: "Admitir",
industryReject: "Rechazar",
industryDissolveTitle: "Disolver fábrica",
industryDissolveHint: "La disolución requiere un voto colectivo; el mayordomo no puede disolverla en solitario.",
industryDissolveVote: "Votar disolución",
industrySector_software: "Software",
industrySector_hardware: "Hardware",
industrySector_agriculture: "Agricultura",
industrySector_textile: "Textil",
industrySector_energy: "Energía",
industrySector_food: "Alimentación",
industrySector_construction: "Construcción",
industrySector_media: "Medios",
industrySector_services: "Servicios",
industrySector_other: "Otro",
industryPolicy_open: "Abierta",
industryPolicy_vote: "Por voto",
industryPolicy_invite: "Solo invitación",
projectsTitle: "Proyectos",
projectsDescription: "Crea, financia y sigue proyectos impulsados por la comunidad en tu red.",
projectCreateProject: "Crear Proyecto",
@ -3331,6 +3631,8 @@ module.exports = {
chatOpenTitle: "Open Chats",
chatClosedTitle: "Closed Chats",
chatDescription: "Descripción",
chatMessageReply: "Respuesta",
chatMessageLabel: "Mensaje",
chatCategory: "Categoría",
chatStatus: "ESTADO",
chatFilterAll: "TODOS",