aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/src/meshbay_hub/static/locales
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/locales')
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/de.js76
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/en.js76
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/es.js76
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js76
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/it.js76
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js76
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js76
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js76
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js76
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js76
10 files changed, 590 insertions, 170 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js
index 7008f79..a83f44b 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js
@@ -92,27 +92,37 @@ export default {
'login.invalid': "Benutzername oder Passphrase falsch.",
'login.locked': "Zu viele falsche Passphrasen für dieses Konto. Versuchen Sie es in {minutes} Min. erneut oder setzen Sie Ihre Passphrase zurück.",
// Sign-in page: what MeshBay is (browser only)
- 'welcome.title': 'Das Internet, wie es gedacht war.',
- 'welcome.lead': 'MeshBay ist Open-Source-Software, mit der Sie aus der Ferne auf Ihre persönlichen Dateien zugreifen und Anwendungen direkt auf dem Speicher Ihres eigenen Computers betreiben:',
+ 'welcome.title': 'Das Netzwerk, das nur von Ihnen abhängt.',
+ 'welcome.lead': 'Ihre Fotos, Musik, Videos und Unterhaltungen bleiben zu Hause, auf Ihrem eigenen Computer. Mit MeshBay genießen Sie sie von überall und teilen sie mit den Menschen Ihrer Wahl.',
'welcome.app_chat': 'Chat',
'welcome.app_photos': 'Fotos',
'welcome.app_media': 'Mediacenter',
'welcome.app_video': 'Videoplayer',
'welcome.app_music': 'Musikplayer',
- 'welcome.groups': 'Erstellen Sie Gruppen, um Ihren Liebsten Zugriff auf einige dieser Anwendungen zu geben.',
- 'welcome.e2e': 'Ihre Daten sind Ende-zu-Ende-verschlüsselt und gehen Peer-to-Peer direkt von jedem Gerät zu dem Computer, auf dem sie liegen (Ihrem Node). Sie laufen niemals über den Hub meshbay.org.',
+ 'welcome.how_title': 'So funktioniert es',
+ 'welcome.step_home': 'Installieren Sie MeshBay auf einem Computer zu Hause. Ihre Dateien bleiben, wo sie sind.',
+ 'welcome.step_anywhere': 'Melden Sie sich von Ihrem Handy, Laptop oder jedem Browser aus an, wo immer Sie sind.',
+ 'welcome.step_share': 'Erstellen Sie Gruppen und laden Sie Familie und Freunde ein.',
'welcome.uses_title': 'Was Sie damit tun können',
'welcome.use_chat': 'Sofortnachrichten innerhalb einer Gruppe',
'welcome.use_photos': 'Fotoalben mit Familie und Freunden teilen',
'welcome.use_media': 'Von überall auf Ihr Mediacenter zu Hause zugreifen, für Sie und Ihren Haushalt (mit Streaming und Chromecast über die Desktop-App)',
'welcome.use_apps': 'Eigene Anwendungen auf dem Node entwickeln, den Sie betreiben',
- 'welcome.hub_title': 'Was meshbay.org tut',
- 'welcome.hub_body': 'meshbay.org ist lediglich ein Signalisierungsdienst: Er meldet Sie an und verbindet die Beteiligten miteinander (Plug-and-Play, über Heimnetzwerke hinweg).',
- 'welcome.hub_never': 'Ihre Inhalte erreichen ihn nie:',
- 'welcome.never_transit': 'Nichts läuft über ihn: keine Inhalte, keine Indexierung',
- 'welcome.never_stored': 'Keine Ihrer Dateien oder Nachrichten wird dort gespeichert',
- 'welcome.never_e2e': 'Durchgehende Verschlüsselung, von jedem Gerät bis zu Ihrem Node',
- 'welcome.hub_free': 'Der Dienst ist kostenlos. Es gibt bewusst kein Geschäftsmodell, kein Tracking und keine Werbung. Viel Spaß!',
+ 'welcome.private_title': 'Privat von Grund auf',
+ 'welcome.private_body': 'Ihre Dateien und Nachrichten reisen verschlüsselt, direkt von Ihren Geräten zu Ihrem eigenen Computer. meshbay.org hilft Ihren Geräten nur, sich zu finden: Ihre Inhalte laufen nie darüber.',
+ 'welcome.badge_free': 'Kostenlos',
+ 'welcome.badge_open': 'Open Source',
+ 'welcome.badge_no_ads': 'Keine Werbung',
+ 'welcome.badge_no_tracking': 'Kein Tracking',
+ 'welcome.docs_title': 'Dokumentation',
+ 'welcome.docs_source': 'Quellcode',
+ 'welcome.docs_repo': 'git.meshbay.org',
+ 'welcome.docs_user': 'Benutzerdoku',
+ 'welcome.docs_quickstart': 'Schnellstart',
+ 'welcome.docs_userguide': 'Benutzerhandbuch',
+ 'welcome.docs_devel': 'Entwicklerdoku',
+ 'welcome.docs_design': 'Architektur',
+ 'welcome.docs_protocol': 'Protokoll',
'welcome.download': 'Herunterladen (Beta)',
'welcome.legal': 'Rechtliche Hinweise',
'register.err_mismatch': 'Die Passwörter stimmen nicht überein',
@@ -688,10 +698,10 @@ export default {
'members.invite_email_failed': 'Die E-Mail konnte nicht gesendet werden — bitte teilen Sie den Code manuell mit.',
'members.invite_email_opt': 'Einladung per E-Mail senden (kann im Spam landen)',
'members.link_title': "Per Link einladen",
- 'members.link_hint': "Für jemanden, der vielleicht noch kein Konto hat. Der Link funktioniert einmal und nur für ein Konto mit dieser Adresse.",
- 'members.link_email_placeholder': "E-Mail-Adresse",
+ 'members.link_hint': "Für jemanden, der vielleicht noch kein Konto hat. Verschicken Sie ihn, wie Sie möchten — Messenger, SMS. Der Link funktioniert einmal, sieben Tage lang, für die Person, die ihn zuerst öffnet.",
+ 'members.link_email_placeholder': "E-Mail-Adresse (optional)",
'members.link_btn': "Link erstellen",
- 'members.link_ready': "Einladungslink für {email}:",
+ 'members.link_ready': "Einladungslink — 7 Tage gültig, einmalig verwendbar:",
'members.link_copy': "Kopieren",
'members.link_copied': "Kopiert",
'members.link_email_sent': "Der Link wurde per E-Mail gesendet.",
@@ -700,9 +710,12 @@ export default {
'members.link_status_expired': "abgelaufen",
'members.link_expires': "läuft ab am {date}",
'members.link_cancel': "Abbrechen",
+ 'members.link_share': "Teilen",
+ 'members.link_share_title': "Einladung",
+ 'members.link_unlabelled': "Link vom {date}",
'invite.title': "Sie wurden eingeladen",
'invite.none': "In diesem Tab wartet keine Einladung. Öffnen Sie den erhaltenen Link erneut.",
- 'invite.signed_out': "Jemand hat Sie in eine Gruppe auf diesem Hub eingeladen. Erstellen Sie ein Konto mit der E-Mail-Adresse, an die die Einladung ging, oder melden Sie sich an, falls Sie bereits eines haben.",
+ 'invite.signed_out': "Jemand hat Sie in eine Gruppe auf diesem Hub eingeladen. Erstellen Sie ein Konto, oder melden Sie sich an, falls Sie bereits eines haben.",
'invite.register': "Konto erstellen",
'invite.signin': "Anmelden",
'invite.confirm': "{inviter} lädt Sie in {group} ein.",
@@ -710,7 +723,6 @@ export default {
'invite.ignore': "Ignorieren",
'invite.open': "Gruppe öffnen",
'invite.already_member': "Sie sind bereits Mitglied von {group}.",
- 'invite.other_account': "Diese Einladung wurde an eine andere E-Mail-Adresse gesendet. Melden Sie sich mit dem Konto dieser Adresse an — Aliasse und Punkte müssen genau übereinstimmen.",
'invite.invalid': "Diese Einladung ist nicht mehr gültig: Sie wurde verwendet, widerrufen oder ist abgelaufen. Bitten Sie um eine neue.",
'invite.joining': "Beitritt…",
'invite.after_register': "Melden Sie sich an, um der Gruppe beizutreten, in die Sie eingeladen wurden.",
@@ -876,6 +888,8 @@ export default {
// Group misc
'group.retry': 'Erneut versuchen',
+ 'lazy.load_failed': 'Dieser Teil der Oberfläche konnte nicht geladen werden. Der Hub wurde möglicherweise aktualisiert, seit diese Seite geöffnet wurde.',
+ 'lazy.reload': 'Seite neu laden',
// Sidebar
'sidebar.node': 'Node',
@@ -898,7 +912,7 @@ export default {
'node.service_restarting': 'Wird neu gestartet…',
'node.service_mode_hint': 'Läuft als Hintergrunddienst — startet beim Booten, vor der Anmeldung.',
'node.startup_mode_label': 'Automatisch starten:',
- 'node.startup_mode_off': 'Aus (manuell starten)',
+ 'node.startup_mode_off': 'Nur solange MeshBay geöffnet ist',
'node.startup_mode_signin': 'Bei der Anmeldung',
'node.startup_mode_service': 'Als Hintergrunddienst (startet beim Booten)',
'node.startup_mode_updating': 'Modus wird gewechselt — achten Sie auf eine Administrator-Eingabeaufforderung…',
@@ -1180,4 +1194,32 @@ export default {
// In-page confirm/alert (ask.js)
'dialog.ok': 'OK',
'dialog.cancel': 'Abbrechen',
+
+ // Content reports (report.js, admin-page.js)
+ 'report.action': "Melden",
+ 'report.title': "Diese Datei melden",
+ 'report.hint': "Ein Administrator dieses Hubs wird sie prüfen.",
+ 'report.reason_illegal': "Illegaler Inhalt",
+ 'report.reason_spam': "Spam",
+ 'report.reason_copyright': "Urheberrechtsverletzung",
+ 'report.reason_other': "Sonstiges",
+ 'report.detail_placeholder': "Details (optional)",
+ 'report.send': "Meldung senden",
+ 'report.sent': "Danke. Ihre Meldung wurde erfasst.",
+ 'admin.tab_reports': "Meldungen",
+ 'admin.no_reports': "Nichts wartet auf eine Entscheidung",
+ 'admin.col_reporters': "Meldende",
+ 'admin.btn_dismiss': "Verwerfen",
+ 'admin.report_block_confirm': "Diese Datei sperren? Jeder Knoten mit einer öffentlichen Gruppe stellt sie dort nicht mehr bereit.",
+ 'admin.reports_heading': "Inhaltsmeldungen",
+ 'admin.reports_hint': "Wer eine Datei in einer öffentlichen Gruppe melden darf, wie oft, und was geschieht, wenn genug Mitglieder es getan haben.",
+ 'admin.reports_min_account_age_hours': "Mindestalter des Kontos (Stunden)",
+ 'admin.reports_daily_per_account': "Meldungen pro Konto und Tag",
+ 'admin.reports_review_threshold': "Mitglieder bis zur Prüfung",
+ 'admin.reports_auto_block': "Ohne Prüfung sperren (1 = ja, 0 = nein)",
+ 'admin.reports_save': "Meldeeinstellungen speichern",
+
+ // Names made writable everywhere when saved (portable-name.js)
+ 'transfers.renamed': "Umbenannt: „{name}“ ist nicht auf jedem System ein gültiger Name",
+ 'transfers.renamed_n': "Namen geändert, damit sie auf jedem System gültig sind: {n}",
};
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js
index 1ea6eda..46c5094 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js
@@ -95,27 +95,37 @@ export default {
'login.invalid': "Wrong username or passphrase.",
'login.locked': "Too many wrong passphrases for this account. Try again in {minutes} min, or reset your passphrase.",
// Sign-in page: what MeshBay is (browser only)
- 'welcome.title': 'The Internet as it was meant to be.',
- 'welcome.lead': 'MeshBay is open-source software that gives you remote access to your personal files, and runs applications on top of the storage on your own computer:',
+ 'welcome.title': 'The network that relies only on you.',
+ 'welcome.lead': 'Your photos, music, videos and conversations stay at home, on your own computer. MeshBay lets you enjoy them from anywhere, and share them with the people you choose.',
'welcome.app_chat': 'Chat',
'welcome.app_photos': 'Photos',
'welcome.app_media': 'Media center',
'welcome.app_video': 'Video player',
'welcome.app_music': 'Music player',
- 'welcome.groups': 'Create groups to give the people close to you access to some of these applications.',
- 'welcome.e2e': 'Your data is end-to-end encrypted and travels peer to peer, from each device to the computer that hosts it (your node). It never passes through the meshbay.org hub.',
+ 'welcome.how_title': 'How it works',
+ 'welcome.step_home': 'Install MeshBay on a computer at home. Your files stay right where they are.',
+ 'welcome.step_anywhere': 'Sign in from your phone, your laptop or any browser, wherever you are.',
+ 'welcome.step_share': 'Create groups and invite your family and friends to join them.',
'welcome.uses_title': 'What you can do with it',
'welcome.use_chat': 'Instant messaging within a group',
'welcome.use_photos': 'Share photo albums with your family and friends',
'welcome.use_media': 'Reach your home media center from anywhere, for the whole household (streaming, plus Chromecast from the desktop app)',
'welcome.use_apps': 'Build your own applications on the node you host',
- 'welcome.hub_title': 'What meshbay.org does',
- 'welcome.hub_body': 'meshbay.org is only a signaling service: it signs you in and connects the parties to one another, plug-and-play, across home networks.',
- 'welcome.hub_never': 'Your content never reaches it:',
- 'welcome.never_transit': 'Nothing passes through it: no content, no indexing',
- 'welcome.never_stored': 'None of your files or messages are stored on it',
- 'welcome.never_e2e': 'Encryption runs end to end, from each device to your node',
- 'welcome.hub_free': 'The service is free. There is no business model by design, no tracking and no ads. Enjoy!',
+ 'welcome.private_title': 'Private by design',
+ 'welcome.private_body': 'Your files and messages travel encrypted, straight from your devices to your own computer. meshbay.org simply helps your devices find each other: your content never passes through it.',
+ 'welcome.badge_free': 'Free',
+ 'welcome.badge_open': 'Open source',
+ 'welcome.badge_no_ads': 'No ads',
+ 'welcome.badge_no_tracking': 'No tracking',
+ 'welcome.docs_title': 'Documentation',
+ 'welcome.docs_source': 'Source code',
+ 'welcome.docs_repo': 'git.meshbay.org',
+ 'welcome.docs_user': 'User docs',
+ 'welcome.docs_quickstart': 'Quick start',
+ 'welcome.docs_userguide': 'User guide',
+ 'welcome.docs_devel': 'Developer docs',
+ 'welcome.docs_design': 'Design',
+ 'welcome.docs_protocol': 'Protocol',
'welcome.download': 'Download (beta)',
'welcome.legal': 'Legal information',
'register.err_mismatch': 'Passwords do not match',
@@ -804,10 +814,10 @@ export default {
'members.invite_email_failed': 'Could not send the email — share the code manually.',
'members.invite_email_opt': 'Send the invitation by e-mail (may land in spam)',
'members.link_title': "Invite by link",
- 'members.link_hint': "For someone who may not have an account yet. The link works once, and only for an account registered with this address.",
- 'members.link_email_placeholder': "E-mail address",
+ 'members.link_hint': "For someone who may not have an account yet. Send it however you like — a messaging app, a text. It works once, for seven days, for whoever opens it first.",
+ 'members.link_email_placeholder': "E-mail address (optional)",
'members.link_btn': "Create link",
- 'members.link_ready': "Invitation link for {email}:",
+ 'members.link_ready': "Invitation link — valid 7 days, single use:",
'members.link_copy': "Copy",
'members.link_copied': "Copied",
'members.link_email_sent': "The link has been sent by e-mail.",
@@ -816,9 +826,12 @@ export default {
'members.link_status_expired': "expired",
'members.link_expires': "expires {date}",
'members.link_cancel': "Cancel",
+ 'members.link_share': "Share",
+ 'members.link_share_title': "Invitation",
+ 'members.link_unlabelled': "link created {date}",
'invite.title': "You have been invited",
'invite.none': "There is no invitation waiting in this tab. Open the link you received again.",
- 'invite.signed_out': "Someone invited you to a group on this hub. Create an account with the e-mail address the invitation was sent to, or sign in if you already have one.",
+ 'invite.signed_out': "Someone invited you to a group on this hub. Create an account, or sign in if you already have one.",
'invite.register': "Create an account",
'invite.signin': "Sign in",
'invite.confirm': "{inviter} invites you to join {group}.",
@@ -826,7 +839,6 @@ export default {
'invite.ignore': "Ignore",
'invite.open': "Open the group",
'invite.already_member': "You are already a member of {group}.",
- 'invite.other_account': "This invitation was sent to another e-mail address. Sign in with the account registered with that address — aliases and dots must match exactly.",
'invite.invalid': "This invitation is no longer valid: it has been used, cancelled or has expired. Ask for a new one.",
'invite.joining': "Joining…",
'invite.after_register': "Sign in to join the group you were invited to.",
@@ -972,6 +984,8 @@ export default {
'group.mute': 'Mute notifications',
'group.unmute': 'Unmute notifications',
'group.retry': 'Retry',
+ 'lazy.load_failed': 'This part of the interface could not be loaded. The hub may have been updated since this page was opened.',
+ 'lazy.reload': 'Reload the page',
'profile.title': 'Profile',
'usermenu.profile': 'Profile',
@@ -994,7 +1008,7 @@ export default {
'node.service_restarting': 'Restarting…',
'node.service_mode_hint': 'Running as a background service — it starts at boot, before sign-in.',
'node.startup_mode_label': 'Start automatically:',
- 'node.startup_mode_off': 'Off (start manually)',
+ 'node.startup_mode_off': 'Only while MeshBay is open',
'node.startup_mode_signin': 'At sign-in',
'node.startup_mode_service': 'As a background service (starts at boot)',
'node.startup_mode_updating': 'Switching mode — check for an administrator prompt…',
@@ -1161,4 +1175,32 @@ export default {
// In-page confirm/alert (ask.js)
'dialog.ok': 'OK',
'dialog.cancel': 'Cancel',
+
+ // Content reports (report.js, admin-page.js)
+ 'report.action': "Report",
+ 'report.title': "Report this file",
+ 'report.hint': "An administrator of this hub will review it.",
+ 'report.reason_illegal': "Illegal content",
+ 'report.reason_spam': "Spam",
+ 'report.reason_copyright': "Copyright infringement",
+ 'report.reason_other': "Other",
+ 'report.detail_placeholder': "Details (optional)",
+ 'report.send': "Send report",
+ 'report.sent': "Thank you. Your report has been recorded.",
+ 'admin.tab_reports': "Reports",
+ 'admin.no_reports': "Nothing is waiting for a decision",
+ 'admin.col_reporters': "Reporters",
+ 'admin.btn_dismiss': "Dismiss",
+ 'admin.report_block_confirm': "Block this file? Every node hosting a public group will stop serving it there.",
+ 'admin.reports_heading': "Content reports",
+ 'admin.reports_hint': "Who may report a file in a public group, how often, and what happens once enough members have.",
+ 'admin.reports_min_account_age_hours': "Minimum account age (hours)",
+ 'admin.reports_daily_per_account': "Reports per account per day",
+ 'admin.reports_review_threshold': "Members before review",
+ 'admin.reports_auto_block': "Block without review (1 = yes, 0 = no)",
+ 'admin.reports_save': "Save report settings",
+
+ // Names made writable everywhere when saved (portable-name.js)
+ 'transfers.renamed': "Renamed: “{name}” is not a valid name on every system",
+ 'transfers.renamed_n': "Names changed to be valid on every system: {n}",
};
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js
index df65367..0d0e865 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js
@@ -91,27 +91,37 @@ export default {
'login.invalid': "Nombre de usuario o frase de contraseña incorrectos.",
'login.locked': "Demasiadas frases de contraseña incorrectas para esta cuenta. Vuelva a intentarlo en {minutes} min o restablezca su frase de contraseña.",
// Sign-in page: what MeshBay is (browser only)
- 'welcome.title': 'Internet como debió ser.',
- 'welcome.lead': 'MeshBay es un software de código abierto que le da acceso remoto a sus archivos personales y ejecuta aplicaciones sobre el almacenamiento de su propio ordenador:',
+ 'welcome.title': 'La red que solo depende de ti.',
+ 'welcome.lead': 'Sus fotos, su música, sus vídeos y sus conversaciones se quedan en casa, en su propio ordenador. MeshBay le permite disfrutarlos desde cualquier lugar y compartirlos con las personas que usted elija.',
'welcome.app_chat': 'Chat',
'welcome.app_photos': 'Fotos',
'welcome.app_media': 'Centro multimedia',
'welcome.app_video': 'Reproductor de vídeo',
'welcome.app_music': 'Reproductor de música',
- 'welcome.groups': 'Cree grupos para dar a sus allegados acceso a algunas de estas aplicaciones.',
- 'welcome.e2e': 'Sus datos están cifrados de extremo a extremo y viajan entre pares, directamente de cada dispositivo al ordenador que los aloja: su nodo. Nunca pasan por el hub meshbay.org.',
+ 'welcome.how_title': 'Cómo funciona',
+ 'welcome.step_home': 'Instale MeshBay en un ordenador de casa. Sus archivos se quedan donde están.',
+ 'welcome.step_anywhere': 'Inicie sesión desde su móvil, su portátil o cualquier navegador, esté donde esté.',
+ 'welcome.step_share': 'Cree grupos e invite a su familia y a sus amigos a unirse.',
'welcome.uses_title': 'Qué puede hacer con él',
'welcome.use_chat': 'Mensajería instantánea dentro de un grupo',
'welcome.use_photos': 'Compartir álbumes de fotos con su familia y amigos',
'welcome.use_media': 'Acceder desde cualquier lugar a su centro multimedia, para usted y su hogar, con streaming y Chromecast desde la aplicación de escritorio',
'welcome.use_apps': 'Crear sus propias aplicaciones en el nodo que aloja',
- 'welcome.hub_title': 'Qué hace meshbay.org',
- 'welcome.hub_body': 'meshbay.org es solo un servicio de señalización: le autentica y conecta a las partes entre sí, sin configuración, a través de redes domésticas.',
- 'welcome.hub_never': 'Su contenido nunca llega a él:',
- 'welcome.never_transit': 'Nada pasa por él: ni contenido ni indexación',
- 'welcome.never_stored': 'Ninguno de sus archivos o mensajes se almacena en él',
- 'welcome.never_e2e': 'Cifrado de extremo a extremo, de cada dispositivo a su nodo',
- 'welcome.hub_free': 'El servicio es gratuito. Deliberadamente no hay modelo de negocio, ni rastreo, ni publicidad. ¡Disfrútelo!',
+ 'welcome.private_title': 'Privado desde el diseño',
+ 'welcome.private_body': 'Sus archivos y mensajes viajan cifrados, directamente de sus dispositivos a su propio ordenador. meshbay.org solo ayuda a que sus dispositivos se encuentren: su contenido nunca pasa por él.',
+ 'welcome.badge_free': 'Gratis',
+ 'welcome.badge_open': 'Código abierto',
+ 'welcome.badge_no_ads': 'Sin publicidad',
+ 'welcome.badge_no_tracking': 'Sin rastreo',
+ 'welcome.docs_title': 'Documentación',
+ 'welcome.docs_source': 'Código fuente',
+ 'welcome.docs_repo': 'git.meshbay.org',
+ 'welcome.docs_user': 'Docs de usuario',
+ 'welcome.docs_quickstart': 'Inicio rápido',
+ 'welcome.docs_userguide': 'Guía de usuario',
+ 'welcome.docs_devel': 'Docs de desarrollo',
+ 'welcome.docs_design': 'Diseño',
+ 'welcome.docs_protocol': 'Protocolo',
'welcome.download': 'Descargar (beta)',
'welcome.legal': 'Información legal',
'register.err_mismatch': 'Las contraseñas no coinciden',
@@ -683,10 +693,10 @@ export default {
'members.invite_email_failed': 'No se pudo enviar el correo — comparta el código manualmente.',
'members.invite_email_opt': 'Enviar la invitación por correo (puede llegar a spam)',
'members.link_title': "Invitar con un enlace",
- 'members.link_hint': "Para alguien que quizá aún no tenga cuenta. El enlace sirve una vez, y solo para una cuenta registrada con esta dirección.",
- 'members.link_email_placeholder': "Dirección de correo",
+ 'members.link_hint': "Para alguien que quizá aún no tenga cuenta. Envíelo como prefiera — mensajería, SMS. El enlace sirve una sola vez, durante siete días, para quien lo abra primero.",
+ 'members.link_email_placeholder': "Dirección de correo (opcional)",
'members.link_btn': "Crear enlace",
- 'members.link_ready': "Enlace de invitación para {email}:",
+ 'members.link_ready': "Enlace de invitación — válido 7 días, un solo uso:",
'members.link_copy': "Copiar",
'members.link_copied': "Copiado",
'members.link_email_sent': "El enlace se ha enviado por correo.",
@@ -695,9 +705,12 @@ export default {
'members.link_status_expired': "caducado",
'members.link_expires': "caduca el {date}",
'members.link_cancel': "Cancelar",
+ 'members.link_share': "Compartir",
+ 'members.link_share_title': "Invitación",
+ 'members.link_unlabelled': "enlace creado el {date}",
'invite.title': "Le han invitado",
'invite.none': "No hay ninguna invitación esperando en esta pestaña. Vuelva a abrir el enlace que recibió.",
- 'invite.signed_out': "Alguien le ha invitado a un grupo en este hub. Cree una cuenta con la dirección de correo a la que se envió la invitación, o inicie sesión si ya tiene una.",
+ 'invite.signed_out': "Alguien le ha invitado a un grupo en este hub. Cree una cuenta, o inicie sesión si ya tiene una.",
'invite.register': "Crear una cuenta",
'invite.signin': "Iniciar sesión",
'invite.confirm': "{inviter} le invita a unirse a {group}.",
@@ -705,7 +718,6 @@ export default {
'invite.ignore': "Ignorar",
'invite.open': "Abrir el grupo",
'invite.already_member': "Ya es miembro de {group}.",
- 'invite.other_account': "Esta invitación se envió a otra dirección de correo. Inicie sesión con la cuenta registrada con esa dirección — los alias y los puntos deben coincidir exactamente.",
'invite.invalid': "Esta invitación ya no es válida: se ha usado, cancelado o ha caducado. Pida una nueva.",
'invite.joining': "Uniéndose…",
'invite.after_register': "Inicie sesión para unirse al grupo al que le invitaron.",
@@ -870,6 +882,8 @@ export default {
// Group
'group.retry': 'Reintentar',
+ 'lazy.load_failed': 'No se pudo cargar esta parte de la interfaz. Es posible que el hub se haya actualizado desde que se abrió esta página.',
+ 'lazy.reload': 'Recargar la página',
// Sidebar
'sidebar.node': 'Node',
@@ -892,7 +906,7 @@ export default {
'node.service_restarting': 'Reiniciando…',
'node.service_mode_hint': 'Se ejecuta como servicio en segundo plano — se inicia al arrancar, antes de iniciar sesión.',
'node.startup_mode_label': 'Iniciar automáticamente:',
- 'node.startup_mode_off': 'Desactivado (iniciar manualmente)',
+ 'node.startup_mode_off': 'Solo mientras MeshBay está abierto',
'node.startup_mode_signin': 'Al iniciar sesión',
'node.startup_mode_service': 'Como servicio en segundo plano (se inicia al arrancar)',
'node.startup_mode_updating': 'Cambiando de modo — compruebe si aparece un aviso de administrador…',
@@ -1174,4 +1188,32 @@ export default {
// In-page confirm/alert (ask.js)
'dialog.ok': 'Aceptar',
'dialog.cancel': 'Cancelar',
+
+ // Content reports (report.js, admin-page.js)
+ 'report.action': "Denunciar",
+ 'report.title': "Denunciar este archivo",
+ 'report.hint': "Un administrador de este hub lo revisará.",
+ 'report.reason_illegal': "Contenido ilegal",
+ 'report.reason_spam': "Spam",
+ 'report.reason_copyright': "Infracción de derechos de autor",
+ 'report.reason_other': "Otro",
+ 'report.detail_placeholder': "Detalles (opcional)",
+ 'report.send': "Enviar denuncia",
+ 'report.sent': "Gracias. Su denuncia ha quedado registrada.",
+ 'admin.tab_reports': "Denuncias",
+ 'admin.no_reports': "Nada espera una decisión",
+ 'admin.col_reporters': "Denunciantes",
+ 'admin.btn_dismiss': "Descartar",
+ 'admin.report_block_confirm': "¿Bloquear este archivo? Todos los nodos que alojan un grupo público dejarán de servirlo allí.",
+ 'admin.reports_heading': "Denuncias de contenido",
+ 'admin.reports_hint': "Quién puede denunciar un archivo en un grupo público, con qué frecuencia y qué ocurre cuando suficientes miembros lo han hecho.",
+ 'admin.reports_min_account_age_hours': "Antigüedad mínima de la cuenta (horas)",
+ 'admin.reports_daily_per_account': "Denuncias por cuenta y día",
+ 'admin.reports_review_threshold': "Miembros antes de la revisión",
+ 'admin.reports_auto_block': "Bloquear sin revisión (1 = sí, 0 = no)",
+ 'admin.reports_save': "Guardar ajustes de denuncias",
+
+ // Names made writable everywhere when saved (portable-name.js)
+ 'transfers.renamed': "Renombrado: «{name}» no es un nombre válido en todos los sistemas",
+ 'transfers.renamed_n': "Nombres cambiados para ser válidos en todos los sistemas: {n}",
};
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js
index e5d542a..3c86cd7 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js
@@ -91,27 +91,37 @@ export default {
'login.invalid': "Nom d'utilisateur ou phrase secrète incorrect.",
'login.locked': "Trop de phrases secrètes erronées pour ce compte. Réessayez dans {minutes} min, ou réinitialisez votre phrase secrète.",
// Sign-in page: what MeshBay is (browser only)
- 'welcome.title': 'L’Internet tel qu’il aurait dû être.',
- 'welcome.lead': 'MeshBay est un logiciel open source qui vous donne accès à distance à vos fichiers personnels et fait tourner des applications sur le stockage de votre ordinateur :',
+ 'welcome.title': 'Le réseau qui ne dépend que de vous.',
+ 'welcome.lead': 'Vos photos, votre musique, vos vidéos et vos conversations restent chez vous, sur votre propre ordinateur. MeshBay vous permet d’en profiter de partout, et de les partager avec les personnes de votre choix.',
'welcome.app_chat': 'Messagerie',
'welcome.app_photos': 'Photos',
'welcome.app_media': 'Médiathèque',
'welcome.app_video': 'Lecteur vidéo',
'welcome.app_music': 'Lecteur de musique',
- 'welcome.groups': 'Créez des groupes pour donner accès à certaines de ces applications à vos proches.',
- 'welcome.e2e': 'Vos données sont chiffrées de bout en bout et circulent en pair à pair, de chaque appareil jusqu’à l’ordinateur qui les héberge (votre nœud). Elles ne passent jamais par le hub meshbay.org.',
+ 'welcome.how_title': 'Comment ça marche',
+ 'welcome.step_home': 'Installez MeshBay sur un ordinateur à la maison. Vos fichiers restent là où ils sont.',
+ 'welcome.step_anywhere': 'Connectez-vous depuis votre téléphone, votre portable ou n’importe quel navigateur, où que vous soyez.',
+ 'welcome.step_share': 'Créez des groupes et invitez-y votre famille et vos amis.',
'welcome.uses_title': 'Ce que vous pouvez en faire',
'welcome.use_chat': 'Messagerie instantanée au sein d’un groupe',
'welcome.use_photos': 'Partager des albums photo avec votre famille et vos amis',
'welcome.use_media': 'Accéder à distance à votre médiathèque personnelle, pour vous et votre foyer (en streaming, et avec Chromecast depuis l’application de bureau)',
'welcome.use_apps': 'Créer vos propres applications sur le nœud que vous hébergez',
- 'welcome.hub_title': 'Le rôle de meshbay.org',
- 'welcome.hub_body': 'meshbay.org est un simple service de signalisation : il vous authentifie et met les participants en relation, sans configuration, à travers les réseaux domestiques.',
- 'welcome.hub_never': 'Vos contenus ne l’atteignent jamais :',
- 'welcome.never_transit': 'Rien ne transite par lui : aucun contenu, aucune indexation',
- 'welcome.never_stored': 'Aucun de vos fichiers ou messages n’y est stocké',
- 'welcome.never_e2e': 'Chiffrement de bout en bout, de chaque appareil jusqu’à votre nœud',
- 'welcome.hub_free': 'Le service est gratuit : aucun modèle économique (c’est voulu), aucun traçage, aucune publicité. Profitez-en !',
+ 'welcome.private_title': 'Privé par conception',
+ 'welcome.private_body': 'Vos fichiers et vos messages circulent chiffrés, directement de vos appareils jusqu’à votre propre ordinateur. meshbay.org aide simplement vos appareils à se trouver : vos contenus ne passent jamais par lui.',
+ 'welcome.badge_free': 'Gratuit',
+ 'welcome.badge_open': 'Open source',
+ 'welcome.badge_no_ads': 'Sans publicité',
+ 'welcome.badge_no_tracking': 'Sans traçage',
+ 'welcome.docs_title': 'Documentation',
+ 'welcome.docs_source': 'Code source',
+ 'welcome.docs_repo': 'git.meshbay.org',
+ 'welcome.docs_user': 'Docs utilisateur',
+ 'welcome.docs_quickstart': 'Démarrage rapide',
+ 'welcome.docs_userguide': 'Guide utilisateur',
+ 'welcome.docs_devel': 'Docs développeur',
+ 'welcome.docs_design': 'Conception',
+ 'welcome.docs_protocol': 'Protocole',
'welcome.download': 'Télécharger (bêta)',
'welcome.legal': 'Informations légales',
'register.err_mismatch': 'Les mots de passe ne correspondent pas',
@@ -686,10 +696,10 @@ export default {
'members.invite_email_failed': "Impossible d’envoyer l’e-mail — partagez le code manuellement.",
'members.invite_email_opt': 'Envoyer l’invitation par e-mail (risque d’arriver dans les spams)',
'members.link_title': "Inviter par lien",
- 'members.link_hint': "Pour quelqu’un qui n’a peut-être pas encore de compte. Le lien ne sert qu’une fois, et seulement pour un compte créé avec cette adresse.",
- 'members.link_email_placeholder': "Adresse e-mail",
+ 'members.link_hint': "Pour quelqu’un qui n’a peut-être pas encore de compte. Envoyez-le comme vous voulez — messagerie, SMS. Le lien ne sert qu’une fois, pendant sept jours, à la première personne qui l’ouvre.",
+ 'members.link_email_placeholder': "Adresse e-mail (facultative)",
'members.link_btn': "Créer le lien",
- 'members.link_ready': "Lien d’invitation pour {email} :",
+ 'members.link_ready': "Lien d’invitation — valable 7 jours, usage unique :",
'members.link_copy': "Copier",
'members.link_copied': "Copié",
'members.link_email_sent': "Le lien a été envoyé par e-mail.",
@@ -698,9 +708,12 @@ export default {
'members.link_status_expired': "expiré",
'members.link_expires': "expire le {date}",
'members.link_cancel': "Annuler",
+ 'members.link_share': "Partager",
+ 'members.link_share_title': "Invitation",
+ 'members.link_unlabelled': "lien créé le {date}",
'invite.title': "Vous êtes invité",
'invite.none': "Aucune invitation n’attend dans cet onglet. Rouvrez le lien que vous avez reçu.",
- 'invite.signed_out': "Quelqu’un vous a invité dans un groupe sur ce hub. Créez un compte avec l’adresse e-mail à laquelle l’invitation a été envoyée, ou connectez-vous si vous en avez déjà un.",
+ 'invite.signed_out': "Quelqu’un vous a invité dans un groupe sur ce hub. Créez un compte, ou connectez-vous si vous en avez déjà un.",
'invite.register': "Créer un compte",
'invite.signin': "Se connecter",
'invite.confirm': "{inviter} vous invite à rejoindre {group}.",
@@ -708,7 +721,6 @@ export default {
'invite.ignore': "Ignorer",
'invite.open': "Ouvrir le groupe",
'invite.already_member': "Vous êtes déjà membre de {group}.",
- 'invite.other_account': "Cette invitation a été envoyée à une autre adresse e-mail. Connectez-vous avec le compte créé avec cette adresse — les alias et les points doivent correspondre exactement.",
'invite.invalid': "Cette invitation n’est plus valable : elle a été utilisée, annulée ou a expiré. Demandez-en une nouvelle.",
'invite.joining': "Adhésion…",
'invite.after_register': "Connectez-vous pour rejoindre le groupe auquel vous avez été invité.",
@@ -873,6 +885,8 @@ export default {
// Group
'group.retry': 'Réessayer',
+ 'lazy.load_failed': 'Cette partie de l\'interface n\'a pas pu être chargée. Le hub a peut-être été mis à jour depuis l\'ouverture de cette page.',
+ 'lazy.reload': 'Recharger la page',
// Sidebar
'sidebar.node': 'Node',
@@ -895,7 +909,7 @@ export default {
'node.service_restarting': 'Redémarrage…',
'node.service_mode_hint': 'Fonctionne comme service en arrière-plan — démarre au boot, avant l\'ouverture de session.',
'node.startup_mode_label': 'Démarrer automatiquement :',
- 'node.startup_mode_off': 'Désactivé (démarrage manuel)',
+ 'node.startup_mode_off': 'Uniquement quand MeshBay est ouvert',
'node.startup_mode_signin': 'À l\'ouverture de session',
'node.startup_mode_service': 'Comme service en arrière-plan (démarre au boot)',
'node.startup_mode_updating': 'Changement de mode — vérifiez une invite d\'administrateur…',
@@ -1189,4 +1203,32 @@ export default {
// In-page confirm/alert (ask.js)
'dialog.ok': 'OK',
'dialog.cancel': 'Annuler',
+
+ // Content reports (report.js, admin-page.js)
+ 'report.action': "Signaler",
+ 'report.title': "Signaler ce fichier",
+ 'report.hint': "Un administrateur de ce hub l’examinera.",
+ 'report.reason_illegal': "Contenu illégal",
+ 'report.reason_spam': "Spam",
+ 'report.reason_copyright': "Atteinte au droit d’auteur",
+ 'report.reason_other': "Autre",
+ 'report.detail_placeholder': "Précisions (facultatif)",
+ 'report.send': "Envoyer le signalement",
+ 'report.sent': "Merci. Votre signalement a été enregistré.",
+ 'admin.tab_reports': "Signalements",
+ 'admin.no_reports': "Rien n’attend de décision",
+ 'admin.col_reporters': "Signalements reçus",
+ 'admin.btn_dismiss': "Écarter",
+ 'admin.report_block_confirm': "Bloquer ce fichier ? Chaque nœud qui héberge un groupe public cessera de le servir.",
+ 'admin.reports_heading': "Signalement de contenu",
+ 'admin.reports_hint': "Qui peut signaler un fichier dans un groupe public, à quelle fréquence, et ce qui se passe quand assez de membres l’ont fait.",
+ 'admin.reports_min_account_age_hours': "Âge minimal du compte (heures)",
+ 'admin.reports_daily_per_account': "Signalements par compte et par jour",
+ 'admin.reports_review_threshold': "Membres avant examen",
+ 'admin.reports_auto_block': "Bloquer sans examen (1 = oui, 0 = non)",
+ 'admin.reports_save': "Enregistrer les réglages de signalement",
+
+ // Names made writable everywhere when saved (portable-name.js)
+ 'transfers.renamed': "Renommé : « {name} » n’est pas un nom valide sur tous les systèmes",
+ 'transfers.renamed_n': "Noms modifiés pour être valides sur tous les systèmes : {n}",
};
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js
index e376550..3a74b4d 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js
@@ -92,27 +92,37 @@ export default {
'login.invalid': "Nome utente o passphrase errati.",
'login.locked': "Troppe passphrase errate per questo account. Riprovi tra {minutes} min oppure reimposti la passphrase.",
// Sign-in page: what MeshBay is (browser only)
- 'welcome.title': 'Internet come doveva essere.',
- 'welcome.lead': 'MeshBay è un software open source che le permette di accedere da remoto ai suoi file personali e di usare applicazioni basate sullo spazio di archiviazione del suo computer:',
+ 'welcome.title': 'La rete che dipende solo da te.',
+ 'welcome.lead': 'Le sue foto, la sua musica, i suoi video e le sue conversazioni restano a casa, sul suo computer. MeshBay le permette di goderseli ovunque e di condividerli con le persone che sceglie.',
'welcome.app_chat': 'Chat',
'welcome.app_photos': 'Foto',
'welcome.app_media': 'Media center',
'welcome.app_video': 'Lettore video',
'welcome.app_music': 'Lettore musicale',
- 'welcome.groups': 'Crei gruppi per dare alle persone a lei care l’accesso ad alcune di queste applicazioni.',
- 'welcome.e2e': 'I suoi dati sono cifrati end-to-end e viaggiano peer-to-peer, direttamente da ogni dispositivo al computer che li ospita: il suo nodo. Non passano mai dall’hub meshbay.org.',
+ 'welcome.how_title': 'Come funziona',
+ 'welcome.step_home': 'Installi MeshBay su un computer di casa. I suoi file restano dove sono.',
+ 'welcome.step_anywhere': 'Acceda dal telefono, dal portatile o da qualsiasi browser, ovunque si trovi.',
+ 'welcome.step_share': 'Crei dei gruppi e inviti la sua famiglia e i suoi amici a unirsi.',
'welcome.uses_title': 'Cosa può farci',
'welcome.use_chat': 'Messaggistica istantanea all’interno di un gruppo',
'welcome.use_photos': 'Condividere album fotografici con famiglia e amici',
'welcome.use_media': 'Accedere ovunque al media center di casa, per lei e la sua famiglia, con streaming e Chromecast dall’app desktop',
'welcome.use_apps': 'Creare le proprie applicazioni sul nodo che ospita',
- 'welcome.hub_title': 'Cosa fa meshbay.org',
- 'welcome.hub_body': 'meshbay.org è solo un servizio di segnalazione: la autentica e mette in contatto le parti, plug-and-play, attraverso le reti domestiche.',
- 'welcome.hub_never': 'I suoi contenuti non lo raggiungono mai:',
- 'welcome.never_transit': 'Nulla passa da lì: nessun contenuto, nessuna indicizzazione',
- 'welcome.never_stored': 'Nessun suo file o messaggio vi è archiviato',
- 'welcome.never_e2e': 'Crittografia end-to-end, da ogni dispositivo al suo nodo',
- 'welcome.hub_free': 'Il servizio è gratuito. Nessun modello di business (per scelta), nessun tracciamento, nessuna pubblicità. Buon divertimento!',
+ 'welcome.private_title': 'Privato per natura',
+ 'welcome.private_body': 'I suoi file e i suoi messaggi viaggiano cifrati, direttamente dai suoi dispositivi al suo computer. meshbay.org aiuta solo i dispositivi a trovarsi: i suoi contenuti non vi passano mai.',
+ 'welcome.badge_free': 'Gratuito',
+ 'welcome.badge_open': 'Open source',
+ 'welcome.badge_no_ads': 'Niente pubblicità',
+ 'welcome.badge_no_tracking': 'Nessun tracciamento',
+ 'welcome.docs_title': 'Documentazione',
+ 'welcome.docs_source': 'Codice sorgente',
+ 'welcome.docs_repo': 'git.meshbay.org',
+ 'welcome.docs_user': 'Documentazione utente',
+ 'welcome.docs_quickstart': 'Avvio rapido',
+ 'welcome.docs_userguide': 'Guida utente',
+ 'welcome.docs_devel': 'Documentazione tecnica',
+ 'welcome.docs_design': 'Architettura',
+ 'welcome.docs_protocol': 'Protocollo',
'welcome.download': 'Scarica (beta)',
'welcome.legal': 'Note legali',
'register.err_mismatch': 'Le password non coincidono',
@@ -686,10 +696,10 @@ export default {
'members.invite_email_failed': "Impossibile inviare l'e-mail — condivida il codice manualmente.",
'members.invite_email_opt': 'Invia l’invito per e-mail (potrebbe finire nello spam)',
'members.link_title': "Invita tramite link",
- 'members.link_hint': "Per chi forse non ha ancora un account. Il link funziona una volta, e solo per un account registrato con questo indirizzo.",
- 'members.link_email_placeholder': "Indirizzo e-mail",
+ 'members.link_hint': "Per chi forse non ha ancora un account. Lo invii come preferisce — messaggistica, SMS. Il link funziona una sola volta, per sette giorni, per chi lo apre per primo.",
+ 'members.link_email_placeholder': "Indirizzo e-mail (facoltativo)",
'members.link_btn': "Crea link",
- 'members.link_ready': "Link d’invito per {email}:",
+ 'members.link_ready': "Link di invito — valido 7 giorni, uso singolo:",
'members.link_copy': "Copia",
'members.link_copied': "Copiato",
'members.link_email_sent': "Il link è stato inviato per e-mail.",
@@ -698,9 +708,12 @@ export default {
'members.link_status_expired': "scaduto",
'members.link_expires': "scade il {date}",
'members.link_cancel': "Annulla",
+ 'members.link_share': "Condividi",
+ 'members.link_share_title': "Invito",
+ 'members.link_unlabelled': "link creato il {date}",
'invite.title': "È stato invitato",
'invite.none': "Nessun invito in attesa in questa scheda. Riapra il link ricevuto.",
- 'invite.signed_out': "Qualcuno l’ha invitata in un gruppo su questo hub. Crei un account con l’indirizzo e-mail a cui è stato inviato l’invito, o acceda se ne ha già uno.",
+ 'invite.signed_out': "Qualcuno l’ha invitata in un gruppo su questo hub. Crei un account, o acceda se ne ha già uno.",
'invite.register': "Crea un account",
'invite.signin': "Accedi",
'invite.confirm': "{inviter} la invita a unirsi a {group}.",
@@ -708,7 +721,6 @@ export default {
'invite.ignore': "Ignora",
'invite.open': "Apri il gruppo",
'invite.already_member': "È già membro di {group}.",
- 'invite.other_account': "Questo invito è stato inviato a un altro indirizzo e-mail. Acceda con l’account registrato con quell’indirizzo — alias e punti devono corrispondere esattamente.",
'invite.invalid': "Questo invito non è più valido: è stato usato, annullato o è scaduto. Ne chieda uno nuovo.",
'invite.joining': "Adesione…",
'invite.after_register': "Acceda per unirsi al gruppo a cui è stato invitato.",
@@ -872,6 +884,8 @@ export default {
// Group misc
'group.retry': 'Riprova',
+ 'lazy.load_failed': 'Impossibile caricare questa parte dell\'interfaccia. L\'hub potrebbe essere stato aggiornato da quando questa pagina è stata aperta.',
+ 'lazy.reload': 'Ricarica la pagina',
// Sidebar
'sidebar.node': 'Node',
@@ -894,7 +908,7 @@ export default {
'node.service_restarting': 'Riavvio…',
'node.service_mode_hint': 'In esecuzione come servizio in background — si avvia all\'avvio del sistema, prima dell\'accesso.',
'node.startup_mode_label': 'Avvia automaticamente:',
- 'node.startup_mode_off': 'Disattivato (avvio manuale)',
+ 'node.startup_mode_off': 'Solo mentre MeshBay è aperto',
'node.startup_mode_signin': 'All\'accesso',
'node.startup_mode_service': 'Come servizio in background (si avvia all\'avvio del sistema)',
'node.startup_mode_updating': 'Cambio modalità — controlli se compare una richiesta di amministratore…',
@@ -1188,4 +1202,32 @@ export default {
// In-page confirm/alert (ask.js)
'dialog.ok': 'OK',
'dialog.cancel': 'Annulla',
+
+ // Content reports (report.js, admin-page.js)
+ 'report.action': "Segnala",
+ 'report.title': "Segnala questo file",
+ 'report.hint': "Un amministratore di questo hub lo esaminerà.",
+ 'report.reason_illegal': "Contenuto illegale",
+ 'report.reason_spam': "Spam",
+ 'report.reason_copyright': "Violazione del diritto d’autore",
+ 'report.reason_other': "Altro",
+ 'report.detail_placeholder': "Dettagli (facoltativo)",
+ 'report.send': "Invia segnalazione",
+ 'report.sent': "Grazie. La tua segnalazione è stata registrata.",
+ 'admin.tab_reports': "Segnalazioni",
+ 'admin.no_reports': "Nulla attende una decisione",
+ 'admin.col_reporters': "Segnalanti",
+ 'admin.btn_dismiss': "Archivia",
+ 'admin.report_block_confirm': "Bloccare questo file? Ogni nodo che ospita un gruppo pubblico smetterà di servirlo lì.",
+ 'admin.reports_heading': "Segnalazioni di contenuti",
+ 'admin.reports_hint': "Chi può segnalare un file in un gruppo pubblico, quanto spesso e cosa succede quando abbastanza membri lo hanno fatto.",
+ 'admin.reports_min_account_age_hours': "Età minima dell’account (ore)",
+ 'admin.reports_daily_per_account': "Segnalazioni per account al giorno",
+ 'admin.reports_review_threshold': "Membri prima dell’esame",
+ 'admin.reports_auto_block': "Blocca senza esame (1 = sì, 0 = no)",
+ 'admin.reports_save': "Salva impostazioni segnalazioni",
+
+ // Names made writable everywhere when saved (portable-name.js)
+ 'transfers.renamed': "Rinominato: «{name}» non è un nome valido su tutti i sistemi",
+ 'transfers.renamed_n': "Nomi modificati per essere validi su tutti i sistemi: {n}",
};
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js
index 622fa5a..e0c38de 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js
@@ -92,27 +92,37 @@ export default {
'login.invalid': "ユーザー名またはパスフレーズが正しくありません。",
'login.locked': "このアカウントでパスフレーズの誤りが多すぎます。{minutes} 分後にもう一度お試しいただくか、パスフレーズをリセットしてください。",
// Sign-in page: what MeshBay is (browser only)
- 'welcome.title': '本来あるべき姿のインターネット。',
- 'welcome.lead': 'MeshBay は、個人のファイルにどこからでもアクセスでき、自分のパソコンのストレージ上でアプリを動かせるオープンソースソフトウェアです。',
+ 'welcome.title': 'あなただけが支えるネットワーク。',
+ 'welcome.lead': '写真、音楽、動画、会話は、ご自宅の自分のパソコンに置いたまま。MeshBay なら、どこからでも楽しめて、選んだ相手と共有できます。',
'welcome.app_chat': 'チャット',
'welcome.app_photos': '写真',
'welcome.app_media': 'メディアセンター',
'welcome.app_video': '動画プレーヤー',
'welcome.app_music': '音楽プレーヤー',
- 'welcome.groups': 'グループを作成して、家族や友人に一部のアプリへのアクセスを許可できます。',
- 'welcome.e2e': 'データはエンドツーエンドで暗号化され、各デバイスからデータを保管するパソコン(あなたのノード)へピアツーピアで直接届きます。meshbay.org のハブを経由することは一切ありません。',
+ 'welcome.how_title': 'しくみ',
+ 'welcome.step_home': '自宅のパソコンに MeshBay をインストール。ファイルはその場所に置いたままです。',
+ 'welcome.step_anywhere': 'スマートフォン、ノートパソコン、どのブラウザからでも、どこにいてもログインできます。',
+ 'welcome.step_share': 'グループを作って、家族や友人を招待しましょう。',
'welcome.uses_title': 'できること',
'welcome.use_chat': 'グループ内でのインスタントメッセージ',
'welcome.use_photos': '家族や友人とのフォトアルバム共有',
'welcome.use_media': '自宅のメディアセンターに外出先からアクセス。ご家族みんなで使え、ストリーミングに対応し、デスクトップアプリからは Chromecast も利用できます',
'welcome.use_apps': 'ホストしているノード上で独自のアプリを開発',
- 'welcome.hub_title': 'meshbay.org の役割',
- 'welcome.hub_body': 'meshbay.org はシグナリング専用のサービスです。ログインを処理し、家庭のネットワーク越しに参加者同士を設定不要でつなぎます。',
- 'welcome.hub_never': 'あなたのコンテンツが届くことはありません:',
- 'welcome.never_transit': '何も経由しません(コンテンツもインデックスもなし)',
- 'welcome.never_stored': 'ファイルやメッセージは一切保存されません',
- 'welcome.never_e2e': '各デバイスからノードまでエンドツーエンドで暗号化',
- 'welcome.hub_free': 'サービスは無料です。ビジネスモデルは意図的に持たず、トラッキングも広告もありません。どうぞお楽しみください!',
+ 'welcome.private_title': '最初からプライベート',
+ 'welcome.private_body': 'ファイルやメッセージは暗号化され、あなたの端末から自分のパソコンへ直接届きます。meshbay.org は端末どうしをつなぐ手助けをするだけで、あなたのコンテンツが経由することはありません。',
+ 'welcome.badge_free': '無料',
+ 'welcome.badge_open': 'オープンソース',
+ 'welcome.badge_no_ads': '広告なし',
+ 'welcome.badge_no_tracking': 'トラッキングなし',
+ 'welcome.docs_title': 'ドキュメント',
+ 'welcome.docs_source': 'ソースコード',
+ 'welcome.docs_repo': 'git.meshbay.org',
+ 'welcome.docs_user': 'ユーザー向け',
+ 'welcome.docs_quickstart': 'クイックスタート',
+ 'welcome.docs_userguide': 'ユーザーガイド',
+ 'welcome.docs_devel': '開発者向け',
+ 'welcome.docs_design': '設計',
+ 'welcome.docs_protocol': 'プロトコル',
'welcome.download': 'ダウンロード(ベータ版)',
'welcome.legal': '法的情報',
'register.err_mismatch': 'パスワードが一致しません',
@@ -678,10 +688,10 @@ export default {
'members.invite_email_failed': 'メールを送信できませんでした。コードを手動で共有してください。',
'members.invite_email_opt': '招待をメールで送信(迷惑メールに入る場合があります)',
'members.link_title': "リンクで招待",
- 'members.link_hint': "まだアカウントを持っていない人向けです。リンクは1回だけ、このアドレスで登録したアカウントでのみ使えます。",
- 'members.link_email_placeholder': "メールアドレス",
+ 'members.link_hint': "まだアカウントを持っていないかもしれない人向けです。メッセージアプリやSMSなど、お好きな方法で送ってください。リンクは7日間有効で、最初に開いた人が一度だけ使えます。",
+ 'members.link_email_placeholder': "メールアドレス(任意)",
'members.link_btn': "リンクを作成",
- 'members.link_ready': "{email} への招待リンク:",
+ 'members.link_ready': "招待リンク — 7日間有効、1回限り:",
'members.link_copy': "コピー",
'members.link_copied': "コピーしました",
'members.link_email_sent': "リンクをメールで送信しました。",
@@ -690,9 +700,12 @@ export default {
'members.link_status_expired': "期限切れ",
'members.link_expires': "{date} に期限切れ",
'members.link_cancel': "取り消す",
+ 'members.link_share': "共有",
+ 'members.link_share_title': "招待",
+ 'members.link_unlabelled': "{date} に作成したリンク",
'invite.title': "招待されています",
'invite.none': "このタブで待機中の招待はありません。受け取ったリンクをもう一度開いてください。",
- 'invite.signed_out': "このハブのグループに招待されています。招待が送られたメールアドレスでアカウントを作成するか、すでにお持ちならサインインしてください。",
+ 'invite.signed_out': "このハブのグループに招待されています。アカウントを作成するか、すでにお持ちならサインインしてください。",
'invite.register': "アカウントを作成",
'invite.signin': "サインイン",
'invite.confirm': "{inviter} さんが {group} への参加に招待しています。",
@@ -700,7 +713,6 @@ export default {
'invite.ignore': "無視",
'invite.open': "グループを開く",
'invite.already_member': "すでに {group} のメンバーです。",
- 'invite.other_account': "この招待は別のメールアドレスに送られました。そのアドレスで登録したアカウントでサインインしてください。エイリアスやドットも完全に一致する必要があります。",
'invite.invalid': "この招待は無効です。使用済み、取り消し済み、または期限切れです。新しい招待を依頼してください。",
'invite.joining': "参加しています…",
'invite.after_register': "招待されたグループに参加するにはサインインしてください。",
@@ -860,6 +872,8 @@ export default {
// Group
'group.retry': '再試行',
+ 'lazy.load_failed': 'インターフェースのこの部分を読み込めませんでした。このページを開いた後に hub が更新された可能性があります。',
+ 'lazy.reload': 'ページを再読み込み',
// Sidebar
'sidebar.node': 'Node',
@@ -882,7 +896,7 @@ export default {
'node.service_restarting': '再起動中…',
'node.service_mode_hint': 'バックグラウンドサービスとして実行中 — サインインより前、起動時に開始します。',
'node.startup_mode_label': '自動的に開始:',
- 'node.startup_mode_off': 'オフ(手動で開始)',
+ 'node.startup_mode_off': 'MeshBay が開いている間のみ',
'node.startup_mode_signin': 'サインイン時',
'node.startup_mode_service': 'バックグラウンドサービスとして(起動時に開始)',
'node.startup_mode_updating': 'モードを切り替え中 — 管理者の確認ダイアログをご確認ください…',
@@ -1172,4 +1186,32 @@ export default {
// In-page confirm/alert (ask.js)
'dialog.ok': 'OK',
'dialog.cancel': 'キャンセル',
+
+ // Content reports (report.js, admin-page.js)
+ 'report.action': "報告",
+ 'report.title': "このファイルを報告",
+ 'report.hint': "このハブの管理者が確認します。",
+ 'report.reason_illegal': "違法なコンテンツ",
+ 'report.reason_spam': "スパム",
+ 'report.reason_copyright': "著作権侵害",
+ 'report.reason_other': "その他",
+ 'report.detail_placeholder': "詳細(任意)",
+ 'report.send': "報告を送信",
+ 'report.sent': "ありがとうございます。報告を受け付けました。",
+ 'admin.tab_reports': "報告",
+ 'admin.no_reports': "判断待ちの項目はありません",
+ 'admin.col_reporters': "報告者数",
+ 'admin.btn_dismiss': "却下",
+ 'admin.report_block_confirm': "このファイルをブロックしますか?公開グループをホストするすべてのノードが、そこでの提供を停止します。",
+ 'admin.reports_heading': "コンテンツの報告",
+ 'admin.reports_hint': "公開グループのファイルを誰が、どのくらいの頻度で報告できるか、そして十分な数のメンバーが報告したときに何が起こるか。",
+ 'admin.reports_min_account_age_hours': "アカウントの最低経過時間(時間)",
+ 'admin.reports_daily_per_account': "1アカウントあたり1日の報告数",
+ 'admin.reports_review_threshold': "確認までのメンバー数",
+ 'admin.reports_auto_block': "確認せずにブロック(1 = はい、0 = いいえ)",
+ 'admin.reports_save': "報告の設定を保存",
+
+ // Names made writable everywhere when saved (portable-name.js)
+ 'transfers.renamed': "名前を変更しました:「{name}」はすべてのシステムで有効な名前ではありません",
+ 'transfers.renamed_n': "すべてのシステムで有効になるよう変更した名前:{n}",
};
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js
index be0b43b..83b9eed 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js
@@ -92,27 +92,37 @@ export default {
'login.invalid': "Onjuiste gebruikersnaam of wachtwoordzin.",
'login.locked': "Te veel onjuiste wachtwoordzinnen voor dit account. Probeer het over {minutes} min opnieuw of stel uw wachtwoordzin opnieuw in.",
// Sign-in page: what MeshBay is (browser only)
- 'welcome.title': 'Het internet zoals het bedoeld was.',
- 'welcome.lead': 'MeshBay is opensourcesoftware waarmee u op afstand bij uw persoonlijke bestanden kunt, en die toepassingen draait bovenop de opslag van uw eigen computer:',
+ 'welcome.title': 'Het netwerk dat alleen van jou afhangt.',
+ 'welcome.lead': 'Uw foto’s, muziek, video’s en gesprekken blijven thuis, op uw eigen computer. Met MeshBay geniet u er overal van en deelt u ze met wie u maar wilt.',
'welcome.app_chat': 'Chat',
'welcome.app_photos': 'Foto’s',
'welcome.app_media': 'Mediacenter',
'welcome.app_video': 'Videospeler',
'welcome.app_music': 'Muziekspeler',
- 'welcome.groups': 'Maak groepen aan om uw naasten toegang te geven tot een aantal van deze toepassingen.',
- 'welcome.e2e': 'Uw gegevens zijn end-to-end versleuteld en gaan peer-to-peer, rechtstreeks van elk apparaat naar de computer waarop ze staan: uw node. Ze gaan nooit via de hub meshbay.org.',
+ 'welcome.how_title': 'Zo werkt het',
+ 'welcome.step_home': 'Installeer MeshBay op een computer thuis. Uw bestanden blijven waar ze zijn.',
+ 'welcome.step_anywhere': 'Meld u aan vanaf uw telefoon, laptop of elke browser, waar u ook bent.',
+ 'welcome.step_share': 'Maak groepen en nodig familie en vrienden uit om mee te doen.',
'welcome.uses_title': 'Wat u ermee kunt doen',
'welcome.use_chat': 'Chatten binnen een groep',
'welcome.use_photos': 'Fotoalbums delen met familie en vrienden',
'welcome.use_media': 'Overal bij uw mediacenter thuis, voor u en uw huishouden, met streaming en Chromecast via de desktop-app',
'welcome.use_apps': 'Uw eigen toepassingen bouwen op de node die u host',
- 'welcome.hub_title': 'Wat meshbay.org doet',
- 'welcome.hub_body': 'meshbay.org is alleen een signaleringsdienst: het meldt u aan en brengt de partijen met elkaar in contact, plug-and-play, over thuisnetwerken heen.',
- 'welcome.hub_never': 'Uw inhoud komt er nooit terecht:',
- 'welcome.never_transit': 'Er gaat niets doorheen: geen inhoud, geen indexering',
- 'welcome.never_stored': 'Geen van uw bestanden of berichten wordt er opgeslagen',
- 'welcome.never_e2e': 'End-to-end versleuteling, van elk apparaat tot uw node',
- 'welcome.hub_free': 'De dienst is gratis. Er is bewust geen verdienmodel, geen tracking en geen advertenties. Veel plezier!',
+ 'welcome.private_title': 'Privé van nature',
+ 'welcome.private_body': 'Uw bestanden en berichten reizen versleuteld, rechtstreeks van uw apparaten naar uw eigen computer. meshbay.org helpt uw apparaten alleen elkaar te vinden: uw inhoud komt er nooit langs.',
+ 'welcome.badge_free': 'Gratis',
+ 'welcome.badge_open': 'Open source',
+ 'welcome.badge_no_ads': 'Geen advertenties',
+ 'welcome.badge_no_tracking': 'Geen tracking',
+ 'welcome.docs_title': 'Documentatie',
+ 'welcome.docs_source': 'Broncode',
+ 'welcome.docs_repo': 'git.meshbay.org',
+ 'welcome.docs_user': 'Gebruikersdocs',
+ 'welcome.docs_quickstart': 'Snelstart',
+ 'welcome.docs_userguide': 'Gebruikershandleiding',
+ 'welcome.docs_devel': 'Ontwikkelaarsdocs',
+ 'welcome.docs_design': 'Ontwerp',
+ 'welcome.docs_protocol': 'Protocol',
'welcome.download': 'Downloaden (bèta)',
'welcome.legal': 'Juridische informatie',
'register.err_mismatch': 'De wachtwoorden komen niet overeen',
@@ -687,10 +697,10 @@ export default {
'members.invite_email_failed': 'Kon de e-mail niet verzenden — deel de code handmatig.',
'members.invite_email_opt': 'Uitnodiging per e-mail versturen (kan in spam belanden)',
'members.link_title': "Uitnodigen via link",
- 'members.link_hint': "Voor iemand die misschien nog geen account heeft. De link werkt één keer, en alleen voor een account met dit adres.",
- 'members.link_email_placeholder': "E-mailadres",
+ 'members.link_hint': "Voor iemand die misschien nog geen account heeft. Verstuur hem zoals u wilt — berichtenapp, sms. De link werkt één keer, zeven dagen lang, voor wie hem als eerste opent.",
+ 'members.link_email_placeholder': "E-mailadres (optioneel)",
'members.link_btn': "Link maken",
- 'members.link_ready': "Uitnodigingslink voor {email}:",
+ 'members.link_ready': "Uitnodigingslink — 7 dagen geldig, eenmalig:",
'members.link_copy': "Kopiëren",
'members.link_copied': "Gekopieerd",
'members.link_email_sent': "De link is per e-mail verstuurd.",
@@ -699,9 +709,12 @@ export default {
'members.link_status_expired': "verlopen",
'members.link_expires': "verloopt op {date}",
'members.link_cancel': "Annuleren",
+ 'members.link_share': "Delen",
+ 'members.link_share_title': "Uitnodiging",
+ 'members.link_unlabelled': "link gemaakt op {date}",
'invite.title': "U bent uitgenodigd",
'invite.none': "Er wacht geen uitnodiging in dit tabblad. Open de ontvangen link opnieuw.",
- 'invite.signed_out': "Iemand heeft u uitgenodigd voor een groep op deze hub. Maak een account aan met het e-mailadres waarnaar de uitnodiging is gestuurd, of meld u aan als u er al een hebt.",
+ 'invite.signed_out': "Iemand heeft u uitgenodigd voor een groep op deze hub. Maak een account aan, of meld u aan als u er al een hebt.",
'invite.register': "Account maken",
'invite.signin': "Aanmelden",
'invite.confirm': "{inviter} nodigt u uit voor {group}.",
@@ -709,7 +722,6 @@ export default {
'invite.ignore': "Negeren",
'invite.open': "Groep openen",
'invite.already_member': "U bent al lid van {group}.",
- 'invite.other_account': "Deze uitnodiging is naar een ander e-mailadres gestuurd. Meld u aan met het account van dat adres — aliassen en punten moeten exact overeenkomen.",
'invite.invalid': "Deze uitnodiging is niet meer geldig: ze is gebruikt, geannuleerd of verlopen. Vraag een nieuwe.",
'invite.joining': "Deelnemen…",
'invite.after_register': "Meld u aan om deel te nemen aan de groep waarvoor u bent uitgenodigd.",
@@ -874,6 +886,8 @@ export default {
// Group
'group.retry': 'Opnieuw proberen',
+ 'lazy.load_failed': 'Dit deel van de interface kon niet worden geladen. De hub is mogelijk bijgewerkt sinds deze pagina werd geopend.',
+ 'lazy.reload': 'Pagina opnieuw laden',
// Sidebar
'sidebar.node': 'Node',
@@ -896,7 +910,7 @@ export default {
'node.service_restarting': 'Herstarten…',
'node.service_mode_hint': 'Actief als achtergrondservice — start bij het opstarten, vóór het aanmelden.',
'node.startup_mode_label': 'Automatisch starten:',
- 'node.startup_mode_off': 'Uit (handmatig starten)',
+ 'node.startup_mode_off': 'Alleen zolang MeshBay open is',
'node.startup_mode_signin': 'Bij aanmelden',
'node.startup_mode_service': 'Als achtergrondservice (start bij het opstarten)',
'node.startup_mode_updating': 'Modus wijzigen — let op een beheerdersprompt…',
@@ -1190,4 +1204,32 @@ export default {
// In-page confirm/alert (ask.js)
'dialog.ok': 'OK',
'dialog.cancel': 'Annuleren',
+
+ // Content reports (report.js, admin-page.js)
+ 'report.action': "Melden",
+ 'report.title': "Dit bestand melden",
+ 'report.hint': "Een beheerder van deze hub bekijkt het.",
+ 'report.reason_illegal': "Illegale inhoud",
+ 'report.reason_spam': "Spam",
+ 'report.reason_copyright': "Inbreuk op auteursrecht",
+ 'report.reason_other': "Overig",
+ 'report.detail_placeholder': "Details (optioneel)",
+ 'report.send': "Melding versturen",
+ 'report.sent': "Dank u. Uw melding is vastgelegd.",
+ 'admin.tab_reports': "Meldingen",
+ 'admin.no_reports': "Niets wacht op een beslissing",
+ 'admin.col_reporters': "Melders",
+ 'admin.btn_dismiss': "Afwijzen",
+ 'admin.report_block_confirm': "Dit bestand blokkeren? Elke node met een openbare groep stopt met het daar aanbieden.",
+ 'admin.reports_heading': "Inhoudsmeldingen",
+ 'admin.reports_hint': "Wie een bestand in een openbare groep mag melden, hoe vaak, en wat er gebeurt als genoeg leden dat hebben gedaan.",
+ 'admin.reports_min_account_age_hours': "Minimale leeftijd van het account (uren)",
+ 'admin.reports_daily_per_account': "Meldingen per account per dag",
+ 'admin.reports_review_threshold': "Leden vóór beoordeling",
+ 'admin.reports_auto_block': "Blokkeren zonder beoordeling (1 = ja, 0 = nee)",
+ 'admin.reports_save': "Meldingsinstellingen opslaan",
+
+ // Names made writable everywhere when saved (portable-name.js)
+ 'transfers.renamed': "Hernoemd: ‘{name}’ is niet op elk systeem een geldige naam",
+ 'transfers.renamed_n': "Namen aangepast zodat ze op elk systeem geldig zijn: {n}",
};
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js
index 6e88a65..3edba2d 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js
@@ -95,27 +95,37 @@ export default {
'login.invalid': "Nieprawidłowa nazwa użytkownika lub hasło-fraza.",
'login.locked': "Zbyt wiele błędnych haseł-fraz dla tego konta. Spróbuj ponownie za {minutes} min lub zresetuj hasło-frazę.",
// Sign-in page: what MeshBay is (browser only)
- 'welcome.title': 'Internet taki, jaki miał być.',
- 'welcome.lead': 'MeshBay to oprogramowanie open source, które daje zdalny dostęp do Twoich plików osobistych i uruchamia aplikacje korzystające z pamięci Twojego własnego komputera:',
+ 'welcome.title': 'Sieć, która zależy tylko od Ciebie.',
+ 'welcome.lead': 'Twoje zdjęcia, muzyka, filmy i rozmowy zostają w domu, na Twoim własnym komputerze. MeshBay pozwala korzystać z nich z dowolnego miejsca i dzielić się nimi z wybranymi osobami.',
'welcome.app_chat': 'Czat',
'welcome.app_photos': 'Zdjęcia',
'welcome.app_media': 'Centrum multimedialne',
'welcome.app_video': 'Odtwarzacz wideo',
'welcome.app_music': 'Odtwarzacz muzyki',
- 'welcome.groups': 'Twórz grupy, aby dać bliskim dostęp do wybranych aplikacji.',
- 'welcome.e2e': 'Twoje dane są szyfrowane end-to-end i przesyłane bezpośrednio (peer-to-peer) z każdego urządzenia do komputera, który je przechowuje (Twojego węzła). Nigdy nie przechodzą przez hub meshbay.org.',
+ 'welcome.how_title': 'Jak to działa',
+ 'welcome.step_home': 'Zainstaluj MeshBay na komputerze w domu. Twoje pliki zostają tam, gdzie są.',
+ 'welcome.step_anywhere': 'Zaloguj się z telefonu, laptopa lub dowolnej przeglądarki, gdziekolwiek jesteś.',
+ 'welcome.step_share': 'Twórz grupy i zapraszaj do nich rodzinę i przyjaciół.',
'welcome.uses_title': 'Co możesz z nim robić',
'welcome.use_chat': 'Komunikator w obrębie grupy',
'welcome.use_photos': 'Udostępnianie albumów ze zdjęciami rodzinie i znajomym',
'welcome.use_media': 'Zdalny dostęp do domowego centrum multimedialnego dla Ciebie i domowników (ze streamingiem i Chromecastem w aplikacji desktopowej)',
'welcome.use_apps': 'Tworzenie własnych aplikacji na węźle, który hostujesz',
- 'welcome.hub_title': 'Czym zajmuje się meshbay.org',
- 'welcome.hub_body': 'meshbay.org to wyłącznie usługa sygnalizacyjna: uwierzytelnia Cię i łączy uczestników ze sobą, bez konfiguracji, także przez sieci domowe.',
- 'welcome.hub_never': 'Twoje treści nigdy do niego nie trafiają:',
- 'welcome.never_transit': 'Nic przez niego nie przechodzi: żadnych treści, żadnego indeksowania',
- 'welcome.never_stored': 'Żadne Twoje pliki ani wiadomości nie są na nim przechowywane',
- 'welcome.never_e2e': 'Szyfrowanie end-to-end, od każdego urządzenia do Twojego węzła',
- 'welcome.hub_free': 'Usługa jest bezpłatna. Celowo nie ma modelu biznesowego, śledzenia ani reklam. Miłego korzystania!',
+ 'welcome.private_title': 'Prywatność w standardzie',
+ 'welcome.private_body': 'Twoje pliki i wiadomości podróżują zaszyfrowane, prosto z Twoich urządzeń do Twojego komputera. meshbay.org jedynie pomaga urządzeniom się odnaleźć: Twoje treści nigdy przez niego nie przechodzą.',
+ 'welcome.badge_free': 'Za darmo',
+ 'welcome.badge_open': 'Open source',
+ 'welcome.badge_no_ads': 'Bez reklam',
+ 'welcome.badge_no_tracking': 'Bez śledzenia',
+ 'welcome.docs_title': 'Dokumentacja',
+ 'welcome.docs_source': 'Kod źródłowy',
+ 'welcome.docs_repo': 'git.meshbay.org',
+ 'welcome.docs_user': 'Dla użytkowników',
+ 'welcome.docs_quickstart': 'Szybki start',
+ 'welcome.docs_userguide': 'Przewodnik',
+ 'welcome.docs_devel': 'Dla programistów',
+ 'welcome.docs_design': 'Architektura',
+ 'welcome.docs_protocol': 'Protokół',
'welcome.download': 'Pobierz (beta)',
'welcome.legal': 'Informacje prawne',
'register.err_mismatch': 'Hasła nie są zgodne',
@@ -699,10 +709,10 @@ export default {
'members.invite_email_failed': 'Nie udało się wysłać e-maila — przekaż kod ręcznie.',
'members.invite_email_opt': 'Wyślij zaproszenie e-mailem (może trafić do spamu)',
'members.link_title': "Zaproś linkiem",
- 'members.link_hint': "Dla kogoś, kto może jeszcze nie mieć konta. Link działa raz i tylko dla konta założonego na ten adres.",
- 'members.link_email_placeholder': "Adres e-mail",
+ 'members.link_hint': "Dla kogoś, kto może jeszcze nie mieć konta. Wyślij go, jak chcesz — komunikatorem, SMS-em. Link działa raz, przez siedem dni, dla osoby, która otworzy go pierwsza.",
+ 'members.link_email_placeholder': "Adres e-mail (opcjonalnie)",
'members.link_btn': "Utwórz link",
- 'members.link_ready': "Link zaproszenia dla {email}:",
+ 'members.link_ready': "Link z zaproszeniem — ważny 7 dni, jednorazowy:",
'members.link_copy': "Kopiuj",
'members.link_copied': "Skopiowano",
'members.link_email_sent': "Link został wysłany e-mailem.",
@@ -711,9 +721,12 @@ export default {
'members.link_status_expired': "wygasł",
'members.link_expires': "wygasa {date}",
'members.link_cancel': "Anuluj",
+ 'members.link_share': "Udostępnij",
+ 'members.link_share_title': "Zaproszenie",
+ 'members.link_unlabelled': "link utworzony {date}",
'invite.title': "Otrzymano zaproszenie",
'invite.none': "W tej karcie nie czeka żadne zaproszenie. Otwórz ponownie otrzymany link.",
- 'invite.signed_out': "Ktoś zaprosił cię do grupy na tym hubie. Załóż konto na adres e-mail, na który wysłano zaproszenie, albo zaloguj się, jeśli już je masz.",
+ 'invite.signed_out': "Ktoś zaprosił cię do grupy na tym hubie. Załóż konto albo zaloguj się, jeśli już je masz.",
'invite.register': "Załóż konto",
'invite.signin': "Zaloguj się",
'invite.confirm': "{inviter} zaprasza cię do {group}.",
@@ -721,7 +734,6 @@ export default {
'invite.ignore': "Ignoruj",
'invite.open': "Otwórz grupę",
'invite.already_member': "Jesteś już członkiem {group}.",
- 'invite.other_account': "To zaproszenie wysłano na inny adres e-mail. Zaloguj się na konto założone na ten adres — aliasy i kropki muszą się dokładnie zgadzać.",
'invite.invalid': "To zaproszenie jest już nieważne: zostało użyte, anulowane lub wygasło. Poproś o nowe.",
'invite.joining': "Dołączanie…",
'invite.after_register': "Zaloguj się, aby dołączyć do grupy, do której cię zaproszono.",
@@ -892,6 +904,8 @@ export default {
// Group (supplementary)
'group.retry': 'Ponów',
+ 'lazy.load_failed': 'Nie udało się wczytać tej części interfejsu. Hub mógł zostać zaktualizowany od czasu otwarcia tej strony.',
+ 'lazy.reload': 'Wczytaj stronę ponownie',
// Sidebar (supplementary)
'sidebar.node': 'Node',
@@ -914,7 +928,7 @@ export default {
'node.service_restarting': 'Ponowne uruchamianie…',
'node.service_mode_hint': 'Działa jako usługa w tle — uruchamia się przy starcie systemu, przed zalogowaniem.',
'node.startup_mode_label': 'Uruchamiaj automatycznie:',
- 'node.startup_mode_off': 'Wyłączone (uruchamianie ręczne)',
+ 'node.startup_mode_off': 'Tylko gdy MeshBay jest otwarty',
'node.startup_mode_signin': 'Przy logowaniu',
'node.startup_mode_service': 'Jako usługa w tle (uruchamia się przy starcie systemu)',
'node.startup_mode_updating': 'Zmiana trybu — proszę sprawdzić, czy pojawiło się okno uprawnień administratora…',
@@ -1216,4 +1230,32 @@ export default {
// In-page confirm/alert (ask.js)
'dialog.ok': 'OK',
'dialog.cancel': 'Anuluj',
+
+ // Content reports (report.js, admin-page.js)
+ 'report.action': "Zgłoś",
+ 'report.title': "Zgłoś ten plik",
+ 'report.hint': "Administrator tego huba go sprawdzi.",
+ 'report.reason_illegal': "Treść nielegalna",
+ 'report.reason_spam': "Spam",
+ 'report.reason_copyright': "Naruszenie praw autorskich",
+ 'report.reason_other': "Inne",
+ 'report.detail_placeholder': "Szczegóły (opcjonalnie)",
+ 'report.send': "Wyślij zgłoszenie",
+ 'report.sent': "Dziękujemy. Zgłoszenie zostało zapisane.",
+ 'admin.tab_reports': "Zgłoszenia",
+ 'admin.no_reports': "Nic nie czeka na decyzję",
+ 'admin.col_reporters': "Zgłaszający",
+ 'admin.btn_dismiss': "Odrzuć",
+ 'admin.report_block_confirm': "Zablokować ten plik? Każdy węzeł hostujący grupę publiczną przestanie go tam udostępniać.",
+ 'admin.reports_heading': "Zgłoszenia treści",
+ 'admin.reports_hint': "Kto może zgłosić plik w grupie publicznej, jak często i co się dzieje, gdy zrobi to wystarczająco wielu członków.",
+ 'admin.reports_min_account_age_hours': "Minimalny wiek konta (godziny)",
+ 'admin.reports_daily_per_account': "Zgłoszenia na konto dziennie",
+ 'admin.reports_review_threshold': "Członkowie przed oceną",
+ 'admin.reports_auto_block': "Blokuj bez oceny (1 = tak, 0 = nie)",
+ 'admin.reports_save': "Zapisz ustawienia zgłoszeń",
+
+ // Names made writable everywhere when saved (portable-name.js)
+ 'transfers.renamed': "Zmieniono nazwę: „{name}” nie jest prawidłową nazwą w każdym systemie",
+ 'transfers.renamed_n': "Nazwy zmienione, by były prawidłowe w każdym systemie: {n}",
};
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js
index edb9146..3f44570 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js
@@ -93,27 +93,37 @@ export default {
'login.invalid': "Nome de usuário ou frase secreta incorretos.",
'login.locked': "Muitas frases secretas incorretas para esta conta. Tente novamente em {minutes} min ou redefina sua frase secreta.",
// Sign-in page: what MeshBay is (browser only)
- 'welcome.title': 'A internet como deveria ser.',
- 'welcome.lead': 'O MeshBay é um software de código aberto que dá acesso remoto aos seus arquivos pessoais e executa aplicativos sobre o armazenamento do seu próprio computador:',
+ 'welcome.title': 'A rede que só depende de você.',
+ 'welcome.lead': 'Suas fotos, músicas, vídeos e conversas ficam em casa, no seu próprio computador. O MeshBay permite que você aproveite tudo de qualquer lugar e compartilhe com as pessoas que escolher.',
'welcome.app_chat': 'Chat',
'welcome.app_photos': 'Fotos',
'welcome.app_media': 'Central de mídia',
'welcome.app_video': 'Player de vídeo',
'welcome.app_music': 'Player de música',
- 'welcome.groups': 'Crie grupos para dar às pessoas próximas acesso a alguns desses aplicativos.',
- 'welcome.e2e': 'Seus dados são criptografados de ponta a ponta e trafegam ponto a ponto, direto de cada dispositivo para o computador que os hospeda: o seu nó. Eles nunca passam pelo hub meshbay.org.',
+ 'welcome.how_title': 'Como funciona',
+ 'welcome.step_home': 'Instale o MeshBay em um computador de casa. Seus arquivos ficam onde estão.',
+ 'welcome.step_anywhere': 'Entre pelo celular, pelo notebook ou por qualquer navegador, onde você estiver.',
+ 'welcome.step_share': 'Crie grupos e convide sua família e seus amigos para participar.',
'welcome.uses_title': 'O que você pode fazer com ele',
'welcome.use_chat': 'Mensagens instantâneas dentro de um grupo',
'welcome.use_photos': 'Compartilhar álbuns de fotos com a família e os amigos',
'welcome.use_media': 'Acessar de qualquer lugar a sua central de mídia, para você e sua casa, com streaming e Chromecast pelo app para desktop',
'welcome.use_apps': 'Criar seus próprios aplicativos no nó que você hospeda',
- 'welcome.hub_title': 'O que o meshbay.org faz',
- 'welcome.hub_body': 'O meshbay.org é apenas um serviço de sinalização: ele autentica você e conecta as partes entre si, plug-and-play, através de redes domésticas.',
- 'welcome.hub_never': 'Seu conteúdo nunca chega até ele:',
- 'welcome.never_transit': 'Nada passa por ele: nenhum conteúdo, nenhuma indexação',
- 'welcome.never_stored': 'Nenhum dos seus arquivos ou mensagens fica armazenado nele',
- 'welcome.never_e2e': 'Criptografia de ponta a ponta, de cada dispositivo até o seu nó',
- 'welcome.hub_free': 'O serviço é gratuito. Não há modelo de negócio (de propósito), rastreamento nem anúncios. Aproveite!',
+ 'welcome.private_title': 'Privado por natureza',
+ 'welcome.private_body': 'Seus arquivos e mensagens viajam criptografados, direto dos seus dispositivos para o seu próprio computador. O meshbay.org só ajuda seus dispositivos a se encontrarem: seu conteúdo nunca passa por ele.',
+ 'welcome.badge_free': 'Gratuito',
+ 'welcome.badge_open': 'Código aberto',
+ 'welcome.badge_no_ads': 'Sem anúncios',
+ 'welcome.badge_no_tracking': 'Sem rastreamento',
+ 'welcome.docs_title': 'Documentação',
+ 'welcome.docs_source': 'Código-fonte',
+ 'welcome.docs_repo': 'git.meshbay.org',
+ 'welcome.docs_user': 'Docs do usuário',
+ 'welcome.docs_quickstart': 'Início rápido',
+ 'welcome.docs_userguide': 'Guia do usuário',
+ 'welcome.docs_devel': 'Docs de desenvolvimento',
+ 'welcome.docs_design': 'Arquitetura',
+ 'welcome.docs_protocol': 'Protocolo',
'welcome.download': 'Baixar (beta)',
'welcome.legal': 'Informações legais',
'register.err_mismatch': 'As senhas não coincidem',
@@ -685,10 +695,10 @@ export default {
'members.invite_email_failed': 'Não foi possível enviar o e-mail — compartilhe o código manualmente.',
'members.invite_email_opt': 'Enviar o convite por e-mail (pode cair no spam)',
'members.link_title': "Convidar por link",
- 'members.link_hint': "Para alguém que talvez ainda não tenha conta. O link funciona uma vez, e só para uma conta registrada com este endereço.",
- 'members.link_email_placeholder': "Endereço de e-mail",
+ 'members.link_hint': "Para alguém que talvez ainda não tenha conta. Envie como preferir — aplicativo de mensagens, SMS. O link funciona uma vez, por sete dias, para quem abrir primeiro.",
+ 'members.link_email_placeholder': "Endereço de e-mail (opcional)",
'members.link_btn': "Criar link",
- 'members.link_ready': "Link de convite para {email}:",
+ 'members.link_ready': "Link de convite — válido por 7 dias, uso único:",
'members.link_copy': "Copiar",
'members.link_copied': "Copiado",
'members.link_email_sent': "O link foi enviado por e-mail.",
@@ -697,9 +707,12 @@ export default {
'members.link_status_expired': "expirado",
'members.link_expires': "expira em {date}",
'members.link_cancel': "Cancelar",
+ 'members.link_share': "Compartilhar",
+ 'members.link_share_title': "Convite",
+ 'members.link_unlabelled': "link criado em {date}",
'invite.title': "Você foi convidado",
'invite.none': "Não há convite aguardando nesta aba. Abra novamente o link que recebeu.",
- 'invite.signed_out': "Alguém convidou você para um grupo neste hub. Crie uma conta com o endereço de e-mail para o qual o convite foi enviado, ou entre se já tiver uma.",
+ 'invite.signed_out': "Alguém convidou você para um grupo neste hub. Crie uma conta, ou entre se já tiver uma.",
'invite.register': "Criar uma conta",
'invite.signin': "Entrar",
'invite.confirm': "{inviter} convida você para participar de {group}.",
@@ -707,7 +720,6 @@ export default {
'invite.ignore': "Ignorar",
'invite.open': "Abrir o grupo",
'invite.already_member': "Você já é membro de {group}.",
- 'invite.other_account': "Este convite foi enviado para outro endereço de e-mail. Entre com a conta registrada com esse endereço — aliases e pontos devem coincidir exatamente.",
'invite.invalid': "Este convite não é mais válido: foi usado, cancelado ou expirou. Peça um novo.",
'invite.joining': "Entrando…",
'invite.after_register': "Entre para participar do grupo para o qual foi convidado.",
@@ -871,6 +883,8 @@ export default {
// Group misc
'group.retry': 'Tentar novamente',
+ 'lazy.load_failed': 'Não foi possível carregar esta parte da interface. O hub pode ter sido atualizado desde que esta página foi aberta.',
+ 'lazy.reload': 'Recarregar a página',
// Sidebar
'sidebar.node': 'Node',
@@ -893,7 +907,7 @@ export default {
'node.service_restarting': 'Reiniciando…',
'node.service_mode_hint': 'Em execução como serviço em segundo plano — inicia na inicialização, antes do login.',
'node.startup_mode_label': 'Iniciar automaticamente:',
- 'node.startup_mode_off': 'Desativado (iniciar manualmente)',
+ 'node.startup_mode_off': 'Somente enquanto o MeshBay estiver aberto',
'node.startup_mode_signin': 'Ao entrar na sessão',
'node.startup_mode_service': 'Como serviço em segundo plano (inicia na inicialização)',
'node.startup_mode_updating': 'Alternando modo — verifique se aparece um aviso de administrador…',
@@ -1175,4 +1189,32 @@ export default {
// In-page confirm/alert (ask.js)
'dialog.ok': 'OK',
'dialog.cancel': 'Cancelar',
+
+ // Content reports (report.js, admin-page.js)
+ 'report.action': "Denunciar",
+ 'report.title': "Denunciar este arquivo",
+ 'report.hint': "Um administrador deste hub vai analisá-lo.",
+ 'report.reason_illegal': "Conteúdo ilegal",
+ 'report.reason_spam': "Spam",
+ 'report.reason_copyright': "Violação de direitos autorais",
+ 'report.reason_other': "Outro",
+ 'report.detail_placeholder': "Detalhes (opcional)",
+ 'report.send': "Enviar denúncia",
+ 'report.sent': "Obrigado. Sua denúncia foi registrada.",
+ 'admin.tab_reports': "Denúncias",
+ 'admin.no_reports': "Nada aguarda decisão",
+ 'admin.col_reporters': "Denunciantes",
+ 'admin.btn_dismiss': "Descartar",
+ 'admin.report_block_confirm': "Bloquear este arquivo? Todos os nós que hospedam um grupo público deixarão de servi-lo ali.",
+ 'admin.reports_heading': "Denúncias de conteúdo",
+ 'admin.reports_hint': "Quem pode denunciar um arquivo em um grupo público, com que frequência e o que acontece quando membros suficientes o fizeram.",
+ 'admin.reports_min_account_age_hours': "Idade mínima da conta (horas)",
+ 'admin.reports_daily_per_account': "Denúncias por conta por dia",
+ 'admin.reports_review_threshold': "Membros antes da análise",
+ 'admin.reports_auto_block': "Bloquear sem análise (1 = sim, 0 = não)",
+ 'admin.reports_save': "Salvar configurações de denúncias",
+
+ // Names made writable everywhere when saved (portable-name.js)
+ 'transfers.renamed': "Renomeado: “{name}” não é um nome válido em todos os sistemas",
+ 'transfers.renamed_n': "Nomes alterados para serem válidos em todos os sistemas: {n}",
};
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js
index 4f5034d..1168460 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js
@@ -92,27 +92,37 @@ export default {
'login.invalid': "用户名或密码短语错误。",
'login.locked': "此账户输错密码短语的次数过多。请在 {minutes} 分钟后重试,或重置密码短语。",
// Sign-in page: what MeshBay is (browser only)
- 'welcome.title': '互联网本该有的样子。',
- 'welcome.lead': 'MeshBay 是一款开源软件,让您远程访问个人文件,并在您自己电脑的存储之上运行应用:',
+ 'welcome.title': '只依靠你自己的网络。',
+ 'welcome.lead': '您的照片、音乐、视频和聊天都留在家里,保存在您自己的电脑上。MeshBay 让您随时随地享用它们,并与您选择的人分享。',
'welcome.app_chat': '聊天',
'welcome.app_photos': '照片',
'welcome.app_media': '媒体中心',
'welcome.app_video': '视频播放器',
'welcome.app_music': '音乐播放器',
- 'welcome.groups': '创建群组,让亲友使用其中部分应用。',
- 'welcome.e2e': '您的数据经过端到端加密,以点对点方式从每台设备直接传输到存放数据的电脑(也就是您的节点)。数据从不经过 meshbay.org 中心服务器。',
+ 'welcome.how_title': '使用方式',
+ 'welcome.step_home': '在家里的电脑上安装 MeshBay。您的文件原地不动。',
+ 'welcome.step_anywhere': '无论身在何处,都可以用手机、笔记本或任意浏览器登录。',
+ 'welcome.step_share': '创建群组,邀请家人和朋友加入。',
'welcome.uses_title': '您可以用它做什么',
'welcome.use_chat': '群组内即时通讯',
'welcome.use_photos': '与家人朋友分享相册',
'welcome.use_media': '随时随地访问家中的媒体中心,供您和家人使用(支持流媒体播放,桌面应用还支持 Chromecast)',
'welcome.use_apps': '在您托管的节点上开发自己的应用',
- 'welcome.hub_title': 'meshbay.org 的作用',
- 'welcome.hub_body': 'meshbay.org 仅是一个信令服务:它负责登录验证,并以即插即用的方式跨家庭网络连接各方。',
- 'welcome.hub_never': '您的内容永远不会到达这里:',
- 'welcome.never_transit': '没有任何数据经过它:没有内容,也没有索引',
- 'welcome.never_stored': '不存储您的任何文件或消息',
- 'welcome.never_e2e': '从每台设备到您的节点全程端到端加密',
- 'welcome.hub_free': '本服务免费。我们刻意不设商业模式,没有跟踪,也没有广告。尽情享用吧!',
+ 'welcome.private_title': '生来私密',
+ 'welcome.private_body': '您的文件和消息经过加密,从您的设备直接传到您自己的电脑。meshbay.org 只负责帮您的设备找到彼此:您的内容从不经过它。',
+ 'welcome.badge_free': '免费',
+ 'welcome.badge_open': '开源',
+ 'welcome.badge_no_ads': '无广告',
+ 'welcome.badge_no_tracking': '无追踪',
+ 'welcome.docs_title': '文档',
+ 'welcome.docs_source': '源代码',
+ 'welcome.docs_repo': 'git.meshbay.org',
+ 'welcome.docs_user': '用户文档',
+ 'welcome.docs_quickstart': '快速入门',
+ 'welcome.docs_userguide': '用户指南',
+ 'welcome.docs_devel': '开发文档',
+ 'welcome.docs_design': '设计',
+ 'welcome.docs_protocol': '协议',
'welcome.download': '下载(测试版)',
'welcome.legal': '法律信息',
'register.err_mismatch': '两次输入的密码不一致',
@@ -667,10 +677,10 @@ export default {
'members.invite_email_failed': '无法发送邮件——请手动分享验证码。',
'members.invite_email_opt': '通过电子邮件发送邀请(可能进入垃圾邮件)',
'members.link_title': "通过链接邀请",
- 'members.link_hint': "适用于可能还没有账户的人。该链接只能使用一次,且仅限使用此地址注册的账户。",
- 'members.link_email_placeholder': "电子邮件地址",
+ 'members.link_hint': "适用于可能还没有账户的人。可以用任何方式发送——即时通讯应用、短信。链接仅可使用一次,有效期七天,归最先打开的人。",
+ 'members.link_email_placeholder': "电子邮件地址(可选)",
'members.link_btn': "创建链接",
- 'members.link_ready': "发给 {email} 的邀请链接:",
+ 'members.link_ready': "邀请链接——有效期 7 天,仅限一次:",
'members.link_copy': "复制",
'members.link_copied': "已复制",
'members.link_email_sent': "链接已通过电子邮件发送。",
@@ -679,9 +689,12 @@ export default {
'members.link_status_expired': "已过期",
'members.link_expires': "{date} 过期",
'members.link_cancel': "取消",
+ 'members.link_share': "分享",
+ 'members.link_share_title': "邀请",
+ 'members.link_unlabelled': "{date} 创建的链接",
'invite.title': "您收到了邀请",
'invite.none': "此标签页中没有待处理的邀请。请重新打开您收到的链接。",
- 'invite.signed_out': "有人邀请您加入此中心上的一个群组。请使用收到邀请的电子邮件地址创建账户,如果已有账户请登录。",
+ 'invite.signed_out': "有人邀请您加入此中心上的一个群组。请创建账户,如果已有账户请登录。",
'invite.register': "创建账户",
'invite.signin': "登录",
'invite.confirm': "{inviter} 邀请您加入 {group}。",
@@ -689,7 +702,6 @@ export default {
'invite.ignore': "忽略",
'invite.open': "打开群组",
'invite.already_member': "您已经是 {group} 的成员。",
- 'invite.other_account': "此邀请发送到了另一个电子邮件地址。请使用该地址注册的账户登录——别名和点号必须完全一致。",
'invite.invalid': "此邀请已失效:已被使用、取消或已过期。请索取新的邀请。",
'invite.joining': "正在加入…",
'invite.after_register': "登录以加入您受邀的群组。",
@@ -848,6 +860,8 @@ export default {
// Group
'group.retry': '重试',
+ 'lazy.load_failed': '无法加载界面的这一部分。自打开此页面以来,hub 可能已更新。',
+ 'lazy.reload': '重新加载页面',
// Sidebar
'sidebar.node': 'Node',
@@ -870,7 +884,7 @@ export default {
'node.service_restarting': '正在重启…',
'node.service_mode_hint': '以后台服务方式运行 — 在开机时启动,早于登录。',
'node.startup_mode_label': '自动启动:',
- 'node.startup_mode_off': '关闭(手动启动)',
+ 'node.startup_mode_off': '仅在 MeshBay 打开时',
'node.startup_mode_signin': '登录时',
'node.startup_mode_service': '作为后台服务(开机时启动)',
'node.startup_mode_updating': '正在切换模式 — 请留意管理员权限提示…',
@@ -1161,4 +1175,32 @@ export default {
// In-page confirm/alert (ask.js)
'dialog.ok': '确定',
'dialog.cancel': '取消',
+
+ // Content reports (report.js, admin-page.js)
+ 'report.action': "举报",
+ 'report.title': "举报此文件",
+ 'report.hint': "本中心的管理员会进行审核。",
+ 'report.reason_illegal': "违法内容",
+ 'report.reason_spam': "垃圾信息",
+ 'report.reason_copyright': "侵犯版权",
+ 'report.reason_other': "其他",
+ 'report.detail_placeholder': "详细说明(可选)",
+ 'report.send': "提交举报",
+ 'report.sent': "谢谢,您的举报已记录。",
+ 'admin.tab_reports': "举报",
+ 'admin.no_reports': "暂无待处理事项",
+ 'admin.col_reporters': "举报人数",
+ 'admin.btn_dismiss': "驳回",
+ 'admin.report_block_confirm': "要屏蔽此文件吗?所有托管公开群组的节点都将停止在那里提供它。",
+ 'admin.reports_heading': "内容举报",
+ 'admin.reports_hint': "谁可以举报公开群组中的文件、举报频率,以及足够多的成员举报后会发生什么。",
+ 'admin.reports_min_account_age_hours': "账户最短注册时长(小时)",
+ 'admin.reports_daily_per_account': "每个账户每天的举报数",
+ 'admin.reports_review_threshold': "进入审核所需人数",
+ 'admin.reports_auto_block': "无需审核直接屏蔽(1 = 是,0 = 否)",
+ 'admin.reports_save': "保存举报设置",
+
+ // Names made writable everywhere when saved (portable-name.js)
+ 'transfers.renamed': "已重命名:“{name}”并非在所有系统上都是有效的名称",
+ 'transfers.renamed_n': "为在所有系统上有效而修改的名称:{n}",
};