upstream: integrar 0.9.5 en 34 ficheros mas y portar los modulos nuevos

Segunda tanda. Resueltas por merge de tres vias 15 divergencias que no solapaban,
y aplicada la version de 0.9.5 en 19 vistas y modelos donde la rama solo arrastraba
codigo antiguo (firmas viejas de renderProductForm, renderJobForm, listTags sin
search, y el import sin renderSpreadEditWarning). Se preserva la eliminacion de
housing donde la rama lo habia descartado: modules_view, blockchain_view,
search_model y tags_model.

Modulos nuevos del dev portados: blog, data, gallery, mentions, polls, workflows,
comments, recurrence y media_gallery, mas contentPdf, pdfDocument y content_favorites.

main_views recupera renderEngagement, spreadsFor y renderSpreadEditWarning, que la
rama habia eliminado y que las vistas de 0.9.5 necesitan. Sin ellas polls_view
lanzaba TypeError al editar.

El overlay de i18n pasa de 15 a 41 claves (46 en castellano): incorpora las 9 que
upstream tenia en 0.9.1 y elimino en 0.9.5 mientras nuestro codigo las sigue usando
(menuBlogs, spreadHint, chatShareUrl, forumFilterHot, publishBlog...) y las 17 de
Karvan, que nunca existieron y tiraban de texto de reserva en ingles; ahora estan
traducidas al castellano.

Verificado con la app arrancada: declara 0.9.5, 0 claves i18n sin resolver (antes
26), 26 rutas responden 200/302, y la interfaz de la rama sale intacta: 10
categorias y 47 modulos en los hexagonos, topbar con Personal/Community y avatar,
7 accesos rapidos en la barra inferior y 0 etiquetas vacias (antes 1, la de Blogs).
This commit is contained in:
SITO 2026-08-18 22:03:41 +02:00
parent f964e61a1c
commit 82b6c3ae05
43 changed files with 3221 additions and 2416 deletions

View file

@ -89,7 +89,6 @@ code {
}
.search-input,
.feed-search-input,
.activity-search-input {
width: 100% !important;
max-width: 100% !important;
@ -914,3 +913,32 @@ a.create-button {
.peers-technical-block .block-info-table td[data-label=""]::before { content: none !important; }
.peers-list .block-info-table td .peer-key,
.peers-technical-block .block-info-table td .peer-key { text-align: right !important; }
.relationship-status .relationship-actions { flex-direction: column !important; align-items: stretch !important; gap: 8px !important; }
.relationship-status .relationship-actions form,
.relationship-status .relationship-actions button { width: 100% !important; }
.profile-sensors-box { align-items: center !important; text-align: center !important; }
.profile-sensors-box > * { margin-left: auto !important; margin-right: auto !important; justify-content: center !important; }
.tribe-feed .refeed-column,
.tribe-feed-full .refeed-column { align-self: center !important; align-items: center !important; justify-content: center !important; }
.tribe-feed .card-footer,
.tribe-feed-full .card-footer { display: flex !important; flex-direction: column !important; align-items: center !important; text-align: center !important; gap: 2px !important; }
.invite-qr-card { display: flex !important; justify-content: center !important; border: none !important; background: transparent !important; padding: 0 !important; box-shadow: none !important; margin: 0 auto !important; }
.invite-qr-img { display: block; margin: 0 auto; }
.stats-kpi { display: flex !important; flex-direction: column !important; align-items: center !important; text-align: center !important; gap: 2px !important; }
.stats-kpi-label,
.stats-kpi-value { width: 100% !important; text-align: center !important; }
.main-column audio,
.main-column video { width: 100% !important; max-width: 100% !important; }
.main-column section:has(.chat-messages-list) { border: none !important; background: transparent !important; padding: 0 !important; box-shadow: none !important; }
.tribe-details:has(.chat-messages-list) { display: block !important; border: none !important; background: transparent !important; padding: 6px !important; margin: 0 !important; box-shadow: none !important; }
.chat-full-width { border: none !important; background: transparent !important; padding: 0 !important; }
.chat-messages-list { padding: 0 !important; }
.chat-message { max-width: 92% !important; }
.chat-message.chat-poll { max-width: 97% !important; }

View file

@ -2,202 +2,490 @@
// Se fusionan sobre las de upstream desde i18n.js, para no editar los 11
// ficheros oasis_*.js (upstream los reescribe entero en cada release).
//
// Contiene: las claves que la rama anade (barra inferior bb*, menu
// Personal/Community, karvanTitle) y los textos de upstream que la rama
// corrige (el grupo "spread" en castellano).
// Contiene tres grupos:
// 1. Claves que anade la rama: barra inferior (bb*), menu Personal/Community
// y el modulo Karvan.
// 2. Claves que upstream tenia en 0.9.1 y elimino en 0.9.5, pero que el
// codigo de la rama sigue usando (menuBlogs, spreadHint, chatShareUrl...).
// 3. Textos de upstream que la rama corrige (el grupo spread en castellano).
module.exports = {
en: {
peerLastChange: "Last change",
menuCommunity: "Community",
menuAll: "All",
filter: "Filter",
bbAdd: "Add",
bbManage: "Edit",
bbRemove: "Remove",
bbQuickActions: "Quick actions",
bbYourBar: "Your bar",
bbFull: "Maximum reached",
bbDone: "Done",
bbPickTitle: "Customize the bar",
bbFull: "Maximum reached",
bbManage: "Edit",
bbPickDesc: "Choose up to 4 shortcuts for the bottom bar.",
bbPickNone: "None",
karvanTitle: "Karvan"
bbPickTitle: "Customize the bar",
bbQuickActions: "Quick actions",
bbRemove: "Remove",
bbYourBar: "Your bar",
bookmarkCategoryLabel: "Category",
bookmarkCategoryPlaceholder: "Optional",
chatShareUrl: "Share URL",
filter: "Filter",
forumFilterHot: "Hot",
karvanActive: "Active rooms",
karvanBlurb: "Rooms that live only in memory and destroy themselves.",
karvanCall: "Call",
karvanCreate: "Create ephemeral room",
karvanEphemeral: "Ephemeral rooms",
karvanInvite: "Invite",
karvanInviteBad: "✗ That is not a valid @feed-id.",
karvanInviteFail: "✗ Could not send the invitation.",
karvanInvitePlaceholder: "Invite a contact by @feed-id…",
karvanInviteSent: "✓ Invitation sent to their inbox.",
karvanNone: "No active rooms. Create one — it disappears on its own.",
karvanRelay: "server relay",
karvanRoomName: "Room name (optional)",
karvanRooms: "Rooms",
karvanSay: "Temporary message…",
karvanSend: "Send",
karvanTitle: "Karvan",
karvanTtl: "Self-destruct in:",
menuAll: "All",
menuBlogs: "Blogs",
menuCommunity: "Community",
peerLastChange: "Last change",
profileVisibilityDevice: "Device",
publishBlog: "Publish Blog",
spreadHint: "Spread this to your supporters (replicates via your feed).",
spreadMore: "more"
},
es: {
peerLastChange: "Último cambio",
menuCommunity: "Comunidad",
menuAll: "Todo",
filter: "Filtrar",
bbAdd: "Añadir",
bbManage: "Editar",
bbRemove: "Quitar",
bbQuickActions: "Accesos rápidos",
bbYourBar: "Tu barra",
bbFull: "Máximo alcanzado",
bbDone: "Hecho",
bbPickTitle: "Personaliza la barra",
bbFull: "Máximo alcanzado",
bbManage: "Editar",
bbPickDesc: "Elige hasta 4 accesos para la barra inferior.",
bbPickNone: "Ninguno",
bbPickTitle: "Personaliza la barra",
bbQuickActions: "Accesos rápidos",
bbRemove: "Quitar",
bbYourBar: "Tu barra",
bookmarkCategoryLabel: "Categoría",
bookmarkCategoryPlaceholder: "Opcional",
chatShareUrl: "Compartir URL",
filter: "Filtrar",
forumFilterHot: "Populares",
karvanActive: "Salas activas",
karvanBlurb: "Salas que solo viven en memoria y se autodestruyen.",
karvanCall: "Llamar",
karvanCreate: "Crear sala efímera",
karvanEphemeral: "Salas efímeras",
karvanInvite: "Invitar",
karvanInviteBad: "✗ No es un @feed-id válido.",
karvanInviteFail: "✗ No se pudo enviar la invitación.",
karvanInvitePlaceholder: "Invita a un contacto por @feed-id…",
karvanInviteSent: "✓ Invitación enviada a su buzón.",
karvanNone: "No hay salas activas. Crea una: desaparece sola.",
karvanRelay: "relay del servidor",
karvanRoomName: "Nombre de la sala (opcional)",
karvanRooms: "Salas",
karvanSay: "Mensaje temporal…",
karvanSend: "Enviar",
karvanTitle: "Karvan",
karvanTtl: "Se autodestruye en:",
menuAll: "Todo",
menuBlogs: "Blogs",
menuCommunity: "Comunidad",
peerLastChange: "Último cambio",
profileVisibilityDevice: "Dispositivo",
publishBlog: "Publicar Blog",
spreadChron: "Difusión",
spreadHint: "Difunde esto a quienes te apoyan (se replica vía tu feed).",
spreadLabel: "Difundir",
spreadMore: "más",
spreaded: "Difundido",
spreadedDescription: "Lista de posts replicados por habitante.",
totalspreads: "Replicas totales",
spreadLabel: "Difundir",
spreadHint: "Difunde esto a quienes te apoyan (se replica vía tu feed)."
totalspreads: "Replicas totales"
},
fr: {
peerLastChange: "Last change",
menuCommunity: "Community",
menuAll: "All",
filter: "Filter",
bbAdd: "Add",
bbManage: "Edit",
bbRemove: "Remove",
bbQuickActions: "Quick actions",
bbYourBar: "Your bar",
bbFull: "Maximum reached",
bbDone: "Done",
bbPickTitle: "Customize the bar",
bbFull: "Maximum reached",
bbManage: "Edit",
bbPickDesc: "Choose up to 4 shortcuts for the bottom bar.",
bbPickNone: "None",
karvanTitle: "Karvan"
bbPickTitle: "Customize the bar",
bbQuickActions: "Quick actions",
bbRemove: "Remove",
bbYourBar: "Your bar",
bookmarkCategoryLabel: "Catégorie",
bookmarkCategoryPlaceholder: "Optionnel",
chatShareUrl: "Partager URL",
filter: "Filter",
forumFilterHot: "Populaires",
karvanActive: "Active rooms",
karvanBlurb: "Rooms that live only in memory and destroy themselves.",
karvanCall: "Call",
karvanCreate: "Create ephemeral room",
karvanEphemeral: "Ephemeral rooms",
karvanInvite: "Invite",
karvanInviteBad: "✗ That is not a valid @feed-id.",
karvanInviteFail: "✗ Could not send the invitation.",
karvanInvitePlaceholder: "Invite a contact by @feed-id…",
karvanInviteSent: "✓ Invitation sent to their inbox.",
karvanNone: "No active rooms. Create one — it disappears on its own.",
karvanRelay: "server relay",
karvanRoomName: "Room name (optional)",
karvanRooms: "Rooms",
karvanSay: "Temporary message…",
karvanSend: "Send",
karvanTitle: "Karvan",
karvanTtl: "Self-destruct in:",
menuAll: "All",
menuBlogs: "Blogs",
menuCommunity: "Community",
peerLastChange: "Last change",
profileVisibilityDevice: "Appareil",
publishBlog: "Publier un blog",
spreadHint: "Diffusez ceci à ceux qui vous soutiennent (réplique via votre feed).",
spreadMore: "plus"
},
eu: {
peerLastChange: "Last change",
menuCommunity: "Community",
menuAll: "All",
filter: "Filter",
bbAdd: "Add",
bbManage: "Edit",
bbRemove: "Remove",
bbQuickActions: "Quick actions",
bbYourBar: "Your bar",
bbFull: "Maximum reached",
bbDone: "Done",
bbPickTitle: "Customize the bar",
bbFull: "Maximum reached",
bbManage: "Edit",
bbPickDesc: "Choose up to 4 shortcuts for the bottom bar.",
bbPickNone: "None",
karvanTitle: "Karvan"
bbPickTitle: "Customize the bar",
bbQuickActions: "Quick actions",
bbRemove: "Remove",
bbYourBar: "Your bar",
bookmarkCategoryLabel: "Kategoria",
bookmarkCategoryPlaceholder: "Aukerakoa",
chatShareUrl: "URLa Partekatu",
filter: "Filter",
forumFilterHot: "Beroa",
karvanActive: "Active rooms",
karvanBlurb: "Rooms that live only in memory and destroy themselves.",
karvanCall: "Call",
karvanCreate: "Create ephemeral room",
karvanEphemeral: "Ephemeral rooms",
karvanInvite: "Invite",
karvanInviteBad: "✗ That is not a valid @feed-id.",
karvanInviteFail: "✗ Could not send the invitation.",
karvanInvitePlaceholder: "Invite a contact by @feed-id…",
karvanInviteSent: "✓ Invitation sent to their inbox.",
karvanNone: "No active rooms. Create one — it disappears on its own.",
karvanRelay: "server relay",
karvanRoomName: "Room name (optional)",
karvanRooms: "Rooms",
karvanSay: "Temporary message…",
karvanSend: "Send",
karvanTitle: "Karvan",
karvanTtl: "Self-destruct in:",
menuAll: "All",
menuBlogs: "Blogak",
menuCommunity: "Community",
peerLastChange: "Last change",
profileVisibilityDevice: "Gailua",
publishBlog: "Bloga argitaratu",
spreadHint: "Hedatu zure babesleei (zure feed bidez errepikatzen da).",
spreadMore: "gehiago"
},
de: {
peerLastChange: "Last change",
menuCommunity: "Community",
menuAll: "All",
filter: "Filter",
bbAdd: "Add",
bbManage: "Edit",
bbRemove: "Remove",
bbQuickActions: "Quick actions",
bbYourBar: "Your bar",
bbFull: "Maximum reached",
bbDone: "Done",
bbPickTitle: "Customize the bar",
bbFull: "Maximum reached",
bbManage: "Edit",
bbPickDesc: "Choose up to 4 shortcuts for the bottom bar.",
bbPickNone: "None",
karvanTitle: "Karvan"
bbPickTitle: "Customize the bar",
bbQuickActions: "Quick actions",
bbRemove: "Remove",
bbYourBar: "Your bar",
bookmarkCategoryLabel: "Kategorie",
bookmarkCategoryPlaceholder: "Optional",
chatShareUrl: "URL Teilen",
filter: "Filter",
forumFilterHot: "Beliebt",
karvanActive: "Active rooms",
karvanBlurb: "Rooms that live only in memory and destroy themselves.",
karvanCall: "Call",
karvanCreate: "Create ephemeral room",
karvanEphemeral: "Ephemeral rooms",
karvanInvite: "Invite",
karvanInviteBad: "✗ That is not a valid @feed-id.",
karvanInviteFail: "✗ Could not send the invitation.",
karvanInvitePlaceholder: "Invite a contact by @feed-id…",
karvanInviteSent: "✓ Invitation sent to their inbox.",
karvanNone: "No active rooms. Create one — it disappears on its own.",
karvanRelay: "server relay",
karvanRoomName: "Room name (optional)",
karvanRooms: "Rooms",
karvanSay: "Temporary message…",
karvanSend: "Send",
karvanTitle: "Karvan",
karvanTtl: "Self-destruct in:",
menuAll: "All",
menuBlogs: "Blogs",
menuCommunity: "Community",
peerLastChange: "Last change",
profileVisibilityDevice: "Gerät",
publishBlog: "Blog veröffentlichen",
spreadHint: "Verbreite dies an deine Unterstützer (über deinen Feed).",
spreadMore: "mehr"
},
it: {
peerLastChange: "Last change",
menuCommunity: "Community",
menuAll: "All",
filter: "Filter",
bbAdd: "Add",
bbManage: "Edit",
bbRemove: "Remove",
bbQuickActions: "Quick actions",
bbYourBar: "Your bar",
bbFull: "Maximum reached",
bbDone: "Done",
bbPickTitle: "Customize the bar",
bbFull: "Maximum reached",
bbManage: "Edit",
bbPickDesc: "Choose up to 4 shortcuts for the bottom bar.",
bbPickNone: "None",
karvanTitle: "Karvan"
bbPickTitle: "Customize the bar",
bbQuickActions: "Quick actions",
bbRemove: "Remove",
bbYourBar: "Your bar",
bookmarkCategoryLabel: "Categoria",
bookmarkCategoryPlaceholder: "Opzionale",
chatShareUrl: "Condividi URL",
filter: "Filter",
forumFilterHot: "Caldi",
karvanActive: "Active rooms",
karvanBlurb: "Rooms that live only in memory and destroy themselves.",
karvanCall: "Call",
karvanCreate: "Create ephemeral room",
karvanEphemeral: "Ephemeral rooms",
karvanInvite: "Invite",
karvanInviteBad: "✗ That is not a valid @feed-id.",
karvanInviteFail: "✗ Could not send the invitation.",
karvanInvitePlaceholder: "Invite a contact by @feed-id…",
karvanInviteSent: "✓ Invitation sent to their inbox.",
karvanNone: "No active rooms. Create one — it disappears on its own.",
karvanRelay: "server relay",
karvanRoomName: "Room name (optional)",
karvanRooms: "Rooms",
karvanSay: "Temporary message…",
karvanSend: "Send",
karvanTitle: "Karvan",
karvanTtl: "Self-destruct in:",
menuAll: "All",
menuBlogs: "Blog",
menuCommunity: "Community",
peerLastChange: "Last change",
profileVisibilityDevice: "Dispositivo",
publishBlog: "Pubblica post",
spreadHint: "Diffondi questo a chi ti supporta (replica via il tuo feed).",
spreadMore: "altro"
},
pt: {
peerLastChange: "Last change",
menuCommunity: "Community",
menuAll: "All",
filter: "Filter",
bbAdd: "Add",
bbManage: "Edit",
bbRemove: "Remove",
bbQuickActions: "Quick actions",
bbYourBar: "Your bar",
bbFull: "Maximum reached",
bbDone: "Done",
bbPickTitle: "Customize the bar",
bbFull: "Maximum reached",
bbManage: "Edit",
bbPickDesc: "Choose up to 4 shortcuts for the bottom bar.",
bbPickNone: "None",
karvanTitle: "Karvan"
bbPickTitle: "Customize the bar",
bbQuickActions: "Quick actions",
bbRemove: "Remove",
bbYourBar: "Your bar",
bookmarkCategoryLabel: "Categoria",
bookmarkCategoryPlaceholder: "Opcional",
chatShareUrl: "Partilhar URL",
filter: "Filter",
forumFilterHot: "Populares",
karvanActive: "Active rooms",
karvanBlurb: "Rooms that live only in memory and destroy themselves.",
karvanCall: "Call",
karvanCreate: "Create ephemeral room",
karvanEphemeral: "Ephemeral rooms",
karvanInvite: "Invite",
karvanInviteBad: "✗ That is not a valid @feed-id.",
karvanInviteFail: "✗ Could not send the invitation.",
karvanInvitePlaceholder: "Invite a contact by @feed-id…",
karvanInviteSent: "✓ Invitation sent to their inbox.",
karvanNone: "No active rooms. Create one — it disappears on its own.",
karvanRelay: "server relay",
karvanRoomName: "Room name (optional)",
karvanRooms: "Rooms",
karvanSay: "Temporary message…",
karvanSend: "Send",
karvanTitle: "Karvan",
karvanTtl: "Self-destruct in:",
menuAll: "All",
menuBlogs: "Blogues",
menuCommunity: "Community",
peerLastChange: "Last change",
profileVisibilityDevice: "Dispositivo",
publishBlog: "Publicar blog",
spreadHint: "Difunde isto aos teus apoiantes (replica pelo teu feed).",
spreadMore: "mais"
},
zh: {
peerLastChange: "Last change",
menuCommunity: "Community",
menuAll: "All",
filter: "Filter",
bbAdd: "Add",
bbManage: "Edit",
bbRemove: "Remove",
bbQuickActions: "Quick actions",
bbYourBar: "Your bar",
bbFull: "Maximum reached",
bbDone: "Done",
bbPickTitle: "Customize the bar",
bbFull: "Maximum reached",
bbManage: "Edit",
bbPickDesc: "Choose up to 4 shortcuts for the bottom bar.",
bbPickNone: "None",
karvanTitle: "Karvan"
bbPickTitle: "Customize the bar",
bbQuickActions: "Quick actions",
bbRemove: "Remove",
bbYourBar: "Your bar",
bookmarkCategoryLabel: "类别",
bookmarkCategoryPlaceholder: "可选",
chatShareUrl: "分享链接",
filter: "Filter",
forumFilterHot: "热门",
karvanActive: "Active rooms",
karvanBlurb: "Rooms that live only in memory and destroy themselves.",
karvanCall: "Call",
karvanCreate: "Create ephemeral room",
karvanEphemeral: "Ephemeral rooms",
karvanInvite: "Invite",
karvanInviteBad: "✗ That is not a valid @feed-id.",
karvanInviteFail: "✗ Could not send the invitation.",
karvanInvitePlaceholder: "Invite a contact by @feed-id…",
karvanInviteSent: "✓ Invitation sent to their inbox.",
karvanNone: "No active rooms. Create one — it disappears on its own.",
karvanRelay: "server relay",
karvanRoomName: "Room name (optional)",
karvanRooms: "Rooms",
karvanSay: "Temporary message…",
karvanSend: "Send",
karvanTitle: "Karvan",
karvanTtl: "Self-destruct in:",
menuAll: "All",
menuBlogs: "博客",
menuCommunity: "Community",
peerLastChange: "Last change",
profileVisibilityDevice: "设备",
publishBlog: "发布博客",
spreadHint: "转发给你的支持者(通过你的 feed 复制)。",
spreadMore: "更多"
},
ar: {
peerLastChange: "Last change",
menuCommunity: "Community",
menuAll: "All",
filter: "Filter",
bbAdd: "Add",
bbManage: "Edit",
bbRemove: "Remove",
bbQuickActions: "Quick actions",
bbYourBar: "Your bar",
bbFull: "Maximum reached",
bbDone: "Done",
bbPickTitle: "Customize the bar",
bbFull: "Maximum reached",
bbManage: "Edit",
bbPickDesc: "Choose up to 4 shortcuts for the bottom bar.",
bbPickNone: "None",
karvanTitle: "Karvan"
bbPickTitle: "Customize the bar",
bbQuickActions: "Quick actions",
bbRemove: "Remove",
bbYourBar: "Your bar",
bookmarkCategoryLabel: "الفئة",
bookmarkCategoryPlaceholder: "اختياري",
chatShareUrl: "مشاركة الرابط",
filter: "Filter",
forumFilterHot: "رائج",
karvanActive: "Active rooms",
karvanBlurb: "Rooms that live only in memory and destroy themselves.",
karvanCall: "Call",
karvanCreate: "Create ephemeral room",
karvanEphemeral: "Ephemeral rooms",
karvanInvite: "Invite",
karvanInviteBad: "✗ That is not a valid @feed-id.",
karvanInviteFail: "✗ Could not send the invitation.",
karvanInvitePlaceholder: "Invite a contact by @feed-id…",
karvanInviteSent: "✓ Invitation sent to their inbox.",
karvanNone: "No active rooms. Create one — it disappears on its own.",
karvanRelay: "server relay",
karvanRoomName: "Room name (optional)",
karvanRooms: "Rooms",
karvanSay: "Temporary message…",
karvanSend: "Send",
karvanTitle: "Karvan",
karvanTtl: "Self-destruct in:",
menuAll: "All",
menuBlogs: "مدونات",
menuCommunity: "Community",
peerLastChange: "Last change",
profileVisibilityDevice: "الجهاز",
publishBlog: "نشر مدونة",
spreadHint: "نشر هذا لداعميك (يتم النسخ عبر تغذيتك).",
spreadMore: "المزيد"
},
hi: {
peerLastChange: "Last change",
menuCommunity: "Community",
menuAll: "All",
filter: "Filter",
bbAdd: "Add",
bbManage: "Edit",
bbRemove: "Remove",
bbQuickActions: "Quick actions",
bbYourBar: "Your bar",
bbFull: "Maximum reached",
bbDone: "Done",
bbPickTitle: "Customize the bar",
bbFull: "Maximum reached",
bbManage: "Edit",
bbPickDesc: "Choose up to 4 shortcuts for the bottom bar.",
bbPickNone: "None",
karvanTitle: "Karvan"
bbPickTitle: "Customize the bar",
bbQuickActions: "Quick actions",
bbRemove: "Remove",
bbYourBar: "Your bar",
bookmarkCategoryLabel: "श्रेणी",
bookmarkCategoryPlaceholder: "वैकल्पिक",
chatShareUrl: "URL शेयर करें",
filter: "Filter",
forumFilterHot: "लोकप्रिय",
karvanActive: "Active rooms",
karvanBlurb: "Rooms that live only in memory and destroy themselves.",
karvanCall: "Call",
karvanCreate: "Create ephemeral room",
karvanEphemeral: "Ephemeral rooms",
karvanInvite: "Invite",
karvanInviteBad: "✗ That is not a valid @feed-id.",
karvanInviteFail: "✗ Could not send the invitation.",
karvanInvitePlaceholder: "Invite a contact by @feed-id…",
karvanInviteSent: "✓ Invitation sent to their inbox.",
karvanNone: "No active rooms. Create one — it disappears on its own.",
karvanRelay: "server relay",
karvanRoomName: "Room name (optional)",
karvanRooms: "Rooms",
karvanSay: "Temporary message…",
karvanSend: "Send",
karvanTitle: "Karvan",
karvanTtl: "Self-destruct in:",
menuAll: "All",
menuBlogs: "ब्लॉग",
menuCommunity: "Community",
peerLastChange: "Last change",
profileVisibilityDevice: "डिवाइस",
publishBlog: "ब्लॉग प्रकाशित करें",
spreadHint: "अपने समर्थकों को फैलाएँ (फ़ीड से प्रतिकृति)।",
spreadMore: "और"
},
ru: {
peerLastChange: "Last change",
menuCommunity: "Community",
menuAll: "All",
filter: "Filter",
bbAdd: "Add",
bbManage: "Edit",
bbRemove: "Remove",
bbQuickActions: "Quick actions",
bbYourBar: "Your bar",
bbFull: "Maximum reached",
bbDone: "Done",
bbPickTitle: "Customize the bar",
bbFull: "Maximum reached",
bbManage: "Edit",
bbPickDesc: "Choose up to 4 shortcuts for the bottom bar.",
bbPickNone: "None",
karvanTitle: "Karvan"
bbPickTitle: "Customize the bar",
bbQuickActions: "Quick actions",
bbRemove: "Remove",
bbYourBar: "Your bar",
bookmarkCategoryLabel: "Категория",
bookmarkCategoryPlaceholder: "Необязательно",
chatShareUrl: "Поделиться URL",
filter: "Filter",
forumFilterHot: "Популярные",
karvanActive: "Active rooms",
karvanBlurb: "Rooms that live only in memory and destroy themselves.",
karvanCall: "Call",
karvanCreate: "Create ephemeral room",
karvanEphemeral: "Ephemeral rooms",
karvanInvite: "Invite",
karvanInviteBad: "✗ That is not a valid @feed-id.",
karvanInviteFail: "✗ Could not send the invitation.",
karvanInvitePlaceholder: "Invite a contact by @feed-id…",
karvanInviteSent: "✓ Invitation sent to their inbox.",
karvanNone: "No active rooms. Create one — it disappears on its own.",
karvanRelay: "server relay",
karvanRoomName: "Room name (optional)",
karvanRooms: "Rooms",
karvanSay: "Temporary message…",
karvanSend: "Send",
karvanTitle: "Karvan",
karvanTtl: "Self-destruct in:",
menuAll: "All",
menuBlogs: "Блоги",
menuCommunity: "Community",
peerLastChange: "Last change",
profileVisibilityDevice: "Устройство",
publishBlog: "Опубликовать блог",
spreadHint: "Распространить вашим сторонникам (через ваш feed).",
spreadMore: "ещё"
}
};

View file

@ -42,7 +42,7 @@ const collectLocalIPs = () => {
module.exports = ({ host, port, middleware, allowHost }) => {
const assets = new Koa()
assets.use(koaStatic(join(__dirname, "..", "client", "assets")));
assets.use(koaStatic(join(__dirname, "..", "client", "assets"), { maxage: 60 * 60 * 1000 }));
const app = new Koa();
const validHosts = [];
@ -79,12 +79,14 @@ module.exports = ({ host, port, middleware, allowHost }) => {
return true;
};
const httpDebug = process.argv.includes('--debug') || process.env.OASIS_DEBUG === '1' || process.env.OASIS_DEBUG === 'true';
app.on("error", (err, ctx) => {
if (err && (err.code === 'ECONNRESET' || err.code === 'EPIPE')) {
return;
}
if (err && (err.name === 'BadRequestError' || err.status === 400)) {
console.error(`[400] ${err.message}`);
if (httpDebug) console.error(`[400] ${err.message}`);
return null;
}
console.error(err);