catalan y gallego propios, feed como la oficial, nombre bajo los botones de icono

- i18n_fork.js sin ca ni gl: se les ponia el bloque en ingles entero, asi que
  nuestros textos salian en ingles y pisaban claves que el dev si traduce (Si/No
  de votar, Responder, Filtrar...). Bloques ca y gl completos, sin las claves que
  el dev ya trae.
- Feed: la cuenta de difusiones a la izquierda del texto y sin la tarjeta dentro
  de la tarjeta.
- Menu ⋯ de la tarjeta: el panel con su ancho y cada accion en una fila.
- Debajo de los botones redondos de la tarjeta, su nombre con attr(title).
- Boton de No molestar de 44px (mobile.css lo fijaba con un selector mas largo).
- Arabe: la columna de contenido de derecha a izquierda.
This commit is contained in:
hacklab 2026-10-22 13:33:01 +02:00
parent b9b3e274a7
commit 389c84b93d
3 changed files with 344 additions and 5 deletions

View file

@ -476,7 +476,11 @@ form.oasis-phone-state {
position: fixed !important; top: calc(var(--inset-top) + 12px); right: 62px; z-index: 101; /* encima de la barra de arriba (100), debajo de la hoja del menu (1000) */
margin: 0 !important; padding: 0 !important; width: auto !important;
}
form.oasis-phone-state .oasis-phone-state-btn {
/* mobile.css lo fija con .oasis-nav-side-toggle ~ .header ...: hace falta mas especificidad */
form.oasis-phone-state .oasis-phone-state-btn,
body .oasis-nav-side-toggle ~ .header form.oasis-phone-state .oasis-phone-state-btn,
body form.oasis-phone-state button.oasis-phone-state-btn.pm-exposition-chip {
min-width: 44px !important; max-width: 44px !important; max-height: 44px !important;
width: 44px !important; height: 44px !important; min-height: 44px !important; padding: 0 !important; margin: 0 !important;
display: inline-flex !important; align-items: center; justify-content: center;
border-radius: 50% !important; box-shadow: none !important; font-size: 20px !important;
@ -887,3 +891,55 @@ body .oasis-mobile-topbar .omt-logo img, body .oasis-mobile-topbar .omt-avatar i
.main-column input[type="datetime-local"], .main-column input[type="date"], .main-column textarea, .main-column select {
background-color: var(--a26-field, var(--a26-bg)) !important;
}
/* arabe: el texto de la columna de derecha a izquierda. El dev no pone dir=rtl; las
barras de arriba y abajo se quedan como estan */
html[lang="ar"] .main-column { direction: rtl; text-align: right; }
html[lang="ar"] .main-column input, html[lang="ar"] .main-column textarea { direction: rtl; }
/* ---------- feed: la cuenta de difusiones a la izquierda del texto, como en la oficial ----------
la columna se apilaba encima con un h1 enorme, y .feed-row pintaba otra tarjeta dentro */
.main-column div.feed-row { display: flex !important; flex-direction: row !important; flex-wrap: nowrap !important; align-items: flex-start !important; }
.main-column [class$="-card"] div.feed-row, .main-column [class*="-card "] div.feed-row {
background: transparent !important; border: 0 !important; box-shadow: none !important; padding: 0 !important; margin: 0 !important;
}
.main-column div.feed-row > div.refeed-column {
flex: 0 0 44px !important; width: 44px !important; display: flex !important; flex-direction: column !important; align-items: center !important;
margin: 0 10px 0 0 !important; padding: 0 !important; min-height: 0 !important;
}
.main-column div.refeed-column > h1 { font-size: 18px !important; line-height: 1.2 !important; margin: 0 !important; color: var(--a26-title, var(--ux-fg)) !important; }
.main-column div.feed-row > div.feed-main { flex: 1 1 auto !important; width: auto !important; min-width: 0 !important; margin: 0 !important; padding: 0 !important; }
/* ---------- menu ⋯ de la tarjeta: el panel con su ancho (lo encogia el max-width:100% del dev) ---------- */
.main-column details.card-menu > div.card-menu-items {
min-width: 220px !important; max-width: none !important; width: auto !important; right: 0 !important; left: auto !important;
padding: 6px 0 !important;
}
.main-column div.card-menu-items > *, .main-column div.card-menu-items > form > button {
width: 100% !important; max-width: none !important; justify-content: flex-start !important; margin: 0 !important;
}
.main-column div.card-menu-items div.confirm-bar { width: auto !important; max-width: none !important; }
/* dentro del panel, cada accion es una fila (icono y nombre), no el boton redondo */
.main-column div.card-menu-items .btn-singleview, .main-column div.card-menu-items summary.btn-singleview {
width: 100% !important; height: auto !important; min-height: 48px !important; border-radius: 0 !important; border: 0 !important;
background: transparent !important; justify-content: flex-start !important; padding: 0 14px !important;
}
.main-column div.card-menu-items .btn-singleview::after { content: attr(title); margin-left: 10px; font-size: 15px; font-weight: 600; }
.main-column div.card-menu-items .btn-singleview > .btn-label, .main-column div.card-menu-items .btn-singleview > span:not(.btn-icon) { display: none !important; }
/* ---------- nombre debajo de los botones redondos de la tarjeta ----------
en el movil no hay hover y el title no se ve al mantener pulsado: se pinta debajo con
attr(title), que es el texto del dev ya traducido. Solo CSS */
.main-column div.content-actions > .btn-singleview,
.main-column div.content-actions > form > .btn-singleview,
.main-column div.content-actions > details.card-menu > summary.card-menu-toggle { position: relative !important; overflow: visible !important; }
.main-column div.content-actions > .btn-singleview[title]::after,
.main-column div.content-actions > form > .btn-singleview[title]::after,
.main-column div.content-actions > details.card-menu > summary.card-menu-toggle[title]::after {
content: attr(title); position: absolute; top: calc(100% + 3px); left: 50%; transform: translateX(-50%);
width: 72px; text-align: center; white-space: normal; overflow-wrap: normal; word-break: normal; hyphens: auto;
font-family: var(--ux-text); font-size: 12px; line-height: 1.15; font-weight: 600; letter-spacing: 0; text-transform: none;
color: var(--ux-muted); pointer-events: none;
}
.main-column div.card-header.card-top > div.content-actions { padding-bottom: 32px !important; }
.main-column div.content-actions > * + * { margin-left: 28px !important; }

View file

@ -308,6 +308,282 @@ module.exports = {
spreadedDescription: "Lista de posts replicados por habitante.",
totalspreads: "Réplicas totales"
},
ca: {
bbMenu: "Menú",
bbMenuClose: "Tanca",
uxPickHint: "Toca'n un i queda desat. El pots canviar quan vulguis a Configuració.",
uxPickCurrent: "En ús",
pubBarJoining: "T'estàs unint al pub… pot trigar fins a un minut. No tanquis l'app.",
pubBarJoinFailed: "Si no has entrat al pub, el més habitual és: no hi ha connexió (wifi o dades), el pub ha caigut o la invitació ja s'ha fet servir. Prova amb un altre pub de la llista o més tard.",
pubBarDownload: "Descarregant la xarxa de {pub} ({tier})…",
pubBarTierRecent: "el més recent",
pubBarTierFull: "tot l'anterior",
pubBarRestore: "Desant al teu mòbil: {pct} % · {n} missatges",
pubBarHint: "Pots continuar fent servir l'app mentrestant.",
pubBarDone: "Ja ets a {pub}: {n} missatges descarregats.",
pubBarErrNoSnap: "T'has unit a {pub}, però no ofereix una còpia per descarregar de cop. El que publiqui la gent anirà arribant de mica en mica mentre l'app estigui oberta.",
pubBarErrNet: "No es pot connectar amb {pub}. Comprova que tens Internet (wifi o dades) i torna-ho a provar d'aquí a una estona; si continua igual, el pub pot haver caigut.",
pubBarErrOther: "La descàrrega des de {pub} s'ha tallat ({error}). Ja hi ets dins; la resta arribarà de mica en mica.",
pubBarClose: "Tanca",
pubBarBackupRestore: "Restaurant la teva còpia: {pct} % · {n} missatges",
pubBarBackupDone: "Còpia restaurada: {n} missatges.",
pubBarBackupErr: "No s'ha pogut restaurar la còpia: {error}. Revisa el fitxer i la contrasenya.",
quickTitle: "El bàsic",
quickHint: "El que vas triar en començar, a un toc.",
quick_identity: "Identitat",
quick_workflow: "Perfil",
quick_ux: "Portada",
quick_colors: "Colors",
quick_community: "Comunitat",
quick_greeting: "Salutació",
quickJoinPub: "Unir-me a un pub",
quickSeePeers: "Amb qui sincronitzes",
quickNoName: "Encara sense nom",
quickEditProfile: "Canviar nom i foto",
quickWriteGreeting: "Escriure la salutació",
welcomeHintColors: "Fons, text i color de realç de l'app.",
colorsHint: "Toca una paleta i s'aplica.",
colorsCustom: "Al teu gust",
colorsBg: "Fons",
colorsFg: "Text",
colorsAccent: "Realç",
colorsApply: "Aplica",
colorsFixed: "El text no es llegia sobre aquest fons, així que s'ha posat en negre o blanc.",
colorsKeep: "Deixar aquests",
palette_oasis: "Estàndard",
palette_acampada: "Plaça",
palette_noche: "Matinada",
palette_bosque: "Hort",
palette_lila: "Violeta",
palette_brasa: "Foguera",
palette_papel: "Fanzín",
palette_contraste: "Pancarta",
welcomeStepUseMobile: "Perfil",
welcomeHintUseMobile: "Per a què fas servir Oasis. Encén els mòduls que calen.",
wfHint_activists: "Assemblees, tribus, votacions, fòrums i documents compartits",
wfHint_acampada: "El just per a una acampada: xats, sales, comissions i votar",
wfHint_full: "Tots els mòduls",
wfHint_default: "Tots els mòduls",
wfHint_social: "Feed, fotos, esdeveniments i amistats",
wfHint_kids: "Escola, jocs i fer coses",
wfHint_night: "Blogs, música, vídeos i xerrada",
wfHint_jobs: "Feina, projectes, mercat i oficina",
wfHint_business: "Economia, banca, oficina i documents",
wfHint_mobile: "El bàsic per al mòbil",
workflow_acampada: "Acampada",
workflow_activista: "Activista",
wfHint_activista: "Per a un col·lectiu: el d'Acampada més campanyes, alertes, enquestes, calendari i tasques",
workflow_minimal: "Mínim",
wfHint_minimal: "Acció directa: convocar, coordinar-se, trucar i avisar",
wfNameMobile_activists: "Moviment",
wfModuleCount: "{n} mòduls",
activityFilter: "Filtra",
tribeSectionsMore: "Més",
tribeSectionsLabel: "Seccions",
voteYes: "Sí",
voteNo: "No",
voteAbstention: "Abstenció",
voteGreen: "Verd · d'acord",
voteYellow: "Groc · dubtes",
voteRed: "Vermell · en contra",
voteOwnNote: "Has creat aquesta votació, així que no hi pots votar: qui proposa es queda neutral.",
voteKindLabel: "Tipus de votació",
voteKind_classic: "Sí / No",
voteKindHint_classic: "Sí, no, abstenció i les opcions de sempre",
voteKind_traffic: "Semàfor",
voteKindHint_traffic: "Verd d'acord · groc dubtes · vermell en contra, com en assemblea",
voteKind_scale: "Termòmetre",
voteKindHint_scale: "De l'1 (fred) al 5 (calent)",
deleteConfirmQuestion: "Esborrar per sempre?",
deleteConfirmYes: "Sí, esborra",
welcomeBannerTextMobile: "Prepara Oasis en un minut.",
welcomeBannerActionMobile: "Començar",
footerPeersNone: "Encara no sincronitzes amb ningú",
footerPeersSome: "Sincronitzant amb {n}",
tribeMapUrlLabel: "Enllaç del mapa (opcional)",
tribeHintPrivacy: "Privada: només la veuen els seus membres i va xifrada. Pública: la veu tota la xarxa.",
tribeHintMode: "Oberta: qualsevol membre pot convidar. Estricta: només convida qui la va crear.",
modulesOnCount: "{on} de {total} seccions actives",
skinIntroMobile: "Tria com es veu Oasis al teu mòbil. S'aplica en tocar-lo.",
workflowsDescriptionMobile: "Cada perfil encén uns mòduls i porta la seva barra de baix. Van de menys a més; canvia'l quan vulguis.",
imageMetadataUnsafe: "No s'han pogut treure les metadades d'aquesta imatge (ubicació, càmera…), així que no s'ha pujat. Desa-la com a JPEG o PNG i torna-ho a provar.",
identitiesActive: "En ús",
identitiesBackup: "Exportar o importar una identitat",
identitiesCreate: "Crear identitat",
identitiesDescription: "Cada identitat viu a la seva pròpia carpeta, amb la seva clau, la seva base de dades i els seus blobs. El canvi s'aplica en reiniciar.",
identitiesInvalidName: "Nom no vàlid. Lletres, números, guió i guió baix, fins a 32.",
identitiesNewName: "Nom de la nova identitat",
identitiesRestart: "Reinicia ara",
identitiesRestartNeeded: "Seleccionada. Reinicia Oasis per entrar amb aquesta identitat.",
identitiesRestarting: "Reiniciant. Torna a obrir Oasis d'aquí a uns segons.",
identitiesSameFeed: "Comparteix clau amb una altra identitat: no publiquis mai des de totes dues.",
identitiesTitle: "Identitats",
identitiesUse: "Fer servir aquesta",
bbAdd: "Afegeix",
bbDone: "Fet",
bbFull: "Màxim assolit",
bbManage: "Edita",
bbPickDesc: "Tria fins a 4 accessos directes per a la barra inferior.",
bbPickNone: "Cap",
bbPickTitle: "Personalitzar la barra",
bbQuickActions: "Accions ràpides",
bbRemove: "Treu",
bbYourBar: "La teva barra",
menuAll: "Tot",
menuBlogs: "Blogs",
menuSocial: "Social",
bookmarkCategoryLabel: "Categoria",
bookmarkCategoryPlaceholder: "Opcional",
chatReply: "Respon",
chatShareUrl: "Comparteix l'enllaç",
filter: "Filtra",
forumFilterHot: "Candent",
peerLastChange: "Últim canvi",
profileVisibilityDevice: "Dispositiu",
publishBlog: "Publicar blog",
spreadHint: "Difon això entre qui et segueix (es replica pel teu feed).",
spreadMore: "més",
spreadLabel: "Difondre",
totalspreads: "Rèpliques totals",
},
gl: {
bbMenu: "Menú",
bbMenuClose: "Pechar",
uxPickHint: "Toca un e queda gardado. Podes cambialo cando queiras en Axustes.",
uxPickCurrent: "En uso",
pubBarJoining: "Uníndote ao pub… pode tardar ata un minuto. Non peches a app.",
pubBarJoinFailed: "Se non entraches no pub, o máis habitual é: non hai conexión (wifi ou datos), o pub está caído ou o convite xa se usou. Proba con outro pub da lista ou máis tarde.",
pubBarDownload: "Descargando a rede de {pub} ({tier})…",
pubBarTierRecent: "o máis recente",
pubBarTierFull: "todo o anterior",
pubBarRestore: "Gardando no teu móbil: {pct} % · {n} mensaxes",
pubBarHint: "Podes seguir usando a app mentres tanto.",
pubBarDone: "Xa estás en {pub}: {n} mensaxes descargadas.",
pubBarErrNoSnap: "Uníchete a {pub}, pero non ofrece unha copia para descargar dunha vez. O que publique a xente irá chegando aos poucos mentres a app estea aberta.",
pubBarErrNet: "Non se pode conectar con {pub}. Comproba que tes Internet (wifi ou datos) e volve probar nun anaco; se segue igual, o pub pode estar caído.",
pubBarErrOther: "A descarga desde {pub} cortouse ({error}). Xa estás dentro; o demais chegará aos poucos.",
pubBarClose: "Pechar",
pubBarBackupRestore: "Restaurando a túa copia: {pct} % · {n} mensaxes",
pubBarBackupDone: "Copia restaurada: {n} mensaxes.",
pubBarBackupErr: "Non se puido restaurar a copia: {error}. Revisa o ficheiro e o contrasinal.",
quickTitle: "O básico",
quickHint: "O que escolliches ao comezar, a un toque.",
quick_identity: "Identidade",
quick_workflow: "Perfil",
quick_ux: "Portada",
quick_colors: "Cores",
quick_community: "Comunidade",
quick_greeting: "Saúdo",
quickJoinPub: "Unirme a un pub",
quickSeePeers: "Con quen sincronizas",
quickNoName: "Aínda sen nome",
quickEditProfile: "Cambiar nome e foto",
quickWriteGreeting: "Escribir o saúdo",
welcomeHintColors: "Fondo, texto e cor de realce da app.",
colorsHint: "Toca unha paleta e aplícase.",
colorsCustom: "Ao teu gusto",
colorsBg: "Fondo",
colorsFg: "Texto",
colorsAccent: "Realce",
colorsApply: "Aplicar",
colorsFixed: "O texto non se lía sobre ese fondo, así que se puxo en negro ou branco.",
colorsKeep: "Deixar estas",
palette_oasis: "Estándar",
palette_acampada: "Praza",
palette_noche: "Madrugada",
palette_bosque: "Horta",
palette_lila: "Violeta",
palette_brasa: "Fogueira",
palette_papel: "Fanzine",
palette_contraste: "Pancarta",
welcomeStepUseMobile: "Perfil",
welcomeHintUseMobile: "Para que usas Oasis. Acende os módulos que fan falta.",
wfHint_activists: "Asembleas, tribos, votacións, foros e documentos compartidos",
wfHint_acampada: "O xusto para unha acampada: chats, salas, comisións e votar",
wfHint_full: "Todos os módulos",
wfHint_default: "Todos os módulos",
wfHint_social: "Feed, fotos, eventos e amizades",
wfHint_kids: "Escola, xogos e facer cousas",
wfHint_night: "Blogs, música, vídeos e conversa",
wfHint_jobs: "Traballo, proxectos, mercado e oficina",
wfHint_business: "Economía, banca, oficina e documentos",
wfHint_mobile: "O básico para o móbil",
workflow_acampada: "Acampada",
workflow_activista: "Activista",
wfHint_activista: "Para un colectivo: o de Acampada máis campañas, alertas, enquisas, calendario e tarefas",
workflow_minimal: "Mínimo",
wfHint_minimal: "Acción directa: convocar, coordinarse, chamar e avisar",
wfNameMobile_activists: "Movemento",
wfModuleCount: "{n} módulos",
activityFilter: "Filtrar",
tribeSectionsMore: "Máis",
tribeSectionsLabel: "Seccións",
voteYes: "Si",
voteNo: "Non",
voteAbstention: "Abstención",
voteGreen: "Verde · de acordo",
voteYellow: "Amarelo · dúbidas",
voteRed: "Vermello · en contra",
voteOwnNote: "Creaches esta votación, así que non podes votar nela: quen propón queda neutral.",
voteKindLabel: "Tipo de votación",
voteKind_classic: "Si / Non",
voteKindHint_classic: "Si, non, abstención e as opcións de sempre",
voteKind_traffic: "Semáforo",
voteKindHint_traffic: "Verde de acordo · amarelo dúbidas · vermello en contra, como en asemblea",
voteKind_scale: "Termómetro",
voteKindHint_scale: "Do 1 (frío) ao 5 (quente)",
deleteConfirmQuestion: "Borrar para sempre?",
deleteConfirmYes: "Si, borrar",
welcomeBannerTextMobile: "Prepara Oasis nun minuto.",
welcomeBannerActionMobile: "Comezar",
footerPeersNone: "Aínda non sincronizas con ninguén",
footerPeersSome: "Sincronizando con {n}",
tribeMapUrlLabel: "Ligazón do mapa (opcional)",
tribeHintPrivacy: "Privada: só a ven os seus membros e vai cifrada. Pública: vea toda a rede.",
tribeHintMode: "Aberta: calquera membro pode convidar. Estrita: só convida quen a creou.",
modulesOnCount: "{on} de {total} seccións activas",
skinIntroMobile: "Escolle como se ve Oasis no teu móbil. Aplícase ao tocalo.",
workflowsDescriptionMobile: "Cada perfil acende uns módulos e trae a súa barra de abaixo. Van de menos a máis; cámbiao cando queiras.",
imageMetadataUnsafe: "Non se puideron quitar os metadatos desta imaxe (localización, cámara…), así que non se subiu. Gárdaa como JPEG ou PNG e volve tentalo.",
identitiesActive: "En uso",
identitiesBackup: "Exportar ou importar unha identidade",
identitiesCreate: "Crear identidade",
identitiesDescription: "Cada identidade vive no seu propio cartafol, coa súa clave, a súa base de datos e os seus blobs. O cambio aplícase ao reiniciar.",
identitiesInvalidName: "Nome non válido. Letras, números, guión e guión baixo, ata 32.",
identitiesNewName: "Nome da nova identidade",
identitiesRestart: "Reiniciar agora",
identitiesRestartNeeded: "Seleccionada. Reinicia Oasis para entrar con esta identidade.",
identitiesRestarting: "Reiniciando. Volve abrir Oasis nuns segundos.",
identitiesSameFeed: "Comparte clave con outra identidade: non publiques nunca desde as dúas.",
identitiesTitle: "Identidades",
identitiesUse: "Usar esta",
bbAdd: "Engadir",
bbDone: "Feito",
bbFull: "Máximo alcanzado",
bbManage: "Editar",
bbPickDesc: "Escolle ata 4 accesos directos para a barra inferior.",
bbPickNone: "Ningún",
bbPickTitle: "Personalizar a barra",
bbQuickActions: "Accións rápidas",
bbRemove: "Quitar",
bbYourBar: "A túa barra",
menuAll: "Todo",
menuBlogs: "Blogs",
menuSocial: "Social",
bookmarkCategoryLabel: "Categoría",
bookmarkCategoryPlaceholder: "Opcional",
chatReply: "Responder",
chatShareUrl: "Compartir ligazón",
filter: "Filtrar",
forumFilterHot: "Candente",
peerLastChange: "Último cambio",
profileVisibilityDevice: "Dispositivo",
publishBlog: "Publicar blog",
spreadHint: "Difunde isto entre quen te segue (replícase polo teu feed).",
spreadMore: "máis",
spreadLabel: "Difundir",
totalspreads: "Réplicas totais",
},
fr: {
// usabilidad (19/10/2026): votaciones, borrar, modulos, pie
bbMenu: "Menu",