diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 2cbc4be79a..7e02ba39fb 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: - node-version: [12.x, 14.x, 15.x] + node-version: [14.x, 16.x] services: postgres: diff --git a/.node-version b/.node-version index ab155ce138..c9b6b29e00 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -v14.15.5 +v16.0.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 848631823c..6926ed918f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -50,7 +50,7 @@ Configuration files are located in [`/.circleci`](/.circleci). * Your PR should include all source files (e.g. `.png`, `.blend`) of your models (for later editing). * Your PR must include the glTF binary files (`.glb`) of your models. * Add a locale key `room.furnitures.YOUR_ITEM` at [`/locales/ja-JP.yml`](/locales/ja-JP.yml). -* Add a furniture definition at [`/src/client/app/common/scripts/room/furnitures.json5`](/src/client/app/common/scripts/room/furnitures.json5). +* Add a furniture definition at [`src/client/scripts/room/furnitures.json5`](src/client/scripts/room/furnitures.json5). If you have no experience on 3D modeling, we suggest to use the free 3DCG software [Blender](https://www.blender.org/). You can find information on glTF 2.0 at [glTF 2.0 — Blender Manual]( https://docs.blender.org/manual/en/dev/addons/io_scene_gltf2.html). diff --git a/Dockerfile b/Dockerfile index 067b772a42..ee4939b58c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:14.15.5-alpine3.13 AS base +FROM node:16.0.0-alpine3.13 AS base ENV NODE_ENV=production diff --git a/gulpfile.ts b/gulpfile.ts index bcd50890e2..660dfb013e 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -5,7 +5,7 @@ import * as fs from 'fs'; import * as gulp from 'gulp'; import * as rimraf from 'rimraf'; -import * as replace from 'gulp-replace'; +const replace = require('gulp-replace'); const terser = require('gulp-terser'); const cssnano = require('gulp-cssnano'); diff --git a/locales/ar-SA.yml b/locales/ar-SA.yml index ddc0dc0e86..370c4a8db3 100644 --- a/locales/ar-SA.yml +++ b/locales/ar-SA.yml @@ -111,7 +111,6 @@ customEmojis: "إيموجي مخصص" addEmoji: "إضافة إيموجي" cacheRemoteFiles: "خزن مؤقتا الملفات البعيدة" autoAcceptFollowed: "اقبل طلبات المتابعة تلقائيا من الحسابات المتابَعة" -addAcount: "إضافة حساب" loginFailed: "فشل الولوج" showOnRemote: "رؤيته على مثيل الخادم البُعدي" general: "الرئيسية" @@ -354,7 +353,6 @@ category: "الفئات" tags: "الوسوم" docSource: "مصدر هذا المستند" createAccount: "أنشئ حسابًا" -existingAcount: "الحسابات الموجودة" regenerate: "أعِد التوليد" fontSize: "حجم الخط" openImageInNewTab: "إفتح الصورة بصفحة جديدة" @@ -430,6 +428,8 @@ usageAmount: "الإستخدام" capacity: "السعة" inUse: "مستخدم" info: "عن" +user: "المستخدمون" +administration: "إدارة " _email: _follow: title: "يتابعك" diff --git a/locales/cs-CZ.yml b/locales/cs-CZ.yml index d6c5f26264..b7372ac47d 100644 --- a/locales/cs-CZ.yml +++ b/locales/cs-CZ.yml @@ -72,6 +72,7 @@ error: "Chyba" somethingHappened: "Jejda. Něco se nepovedlo." retry: "Opakovat" pageLoadError: "Nepodařilo se načíst stránku" +privacy: "Soukromí" follow: "Sledovaní" unfollow: "Přestat sledovat" renote: "Přeposlat" @@ -116,7 +117,6 @@ flagAsBotDescription: "Pokud je tento účet kontrolován programem zaškrtněte flagAsCat: "Tenhle účet je kočka" flagAsCatDescription: "Vyberte tuto možnost aby tento účet byl označen jako kočka." autoAcceptFollowed: "Automaticky akceptovat následování od účtů které sledujete" -addAcount: "Přidat účet" loginFailed: "Přihlášení se nezdařilo." general: "Obecně" wallpaper: "Obrázek na pozadí" @@ -149,6 +149,7 @@ clearQueue: "Vyčistit frontu" clearQueueConfirmTitle: "Jste si jisti že zrušit všechny úlohy ve frontě?" clearCachedFiles: "Vyprázdnit mezipaměť" blockedInstances: "Blokované instance" +editProfile: "Upravit můj profil" pinLimitExceeded: "Nemůžete připnout další poznámky." intro: "Instalace Misskey byla dokončena! Prosím vytvořte admina." done: "Hotovo" @@ -161,6 +162,7 @@ all: "Vše" subscribing: "Odebíráte" publishing: "Publikuji" notResponding: "Neodpovídá" +instanceFollowing: "Následovníci na instanci" instanceFollowers: "Následovníci na instanci" instanceUsers: "Uživatelé této instance" changePassword: "Změnit heslo" @@ -170,6 +172,7 @@ newPassword: "Nové heslo" newPasswordRetype: "Nové heslo (znovu)" attachFile: "Přiložit soubor" more: "Více!" +featured: "Oblíbené poznámky" usernameOrUserId: "Uživatelské jméno nebo uživatelské id" noSuchUser: "Uživatel nebyl nalezen" announcements: "Oznámení" @@ -203,6 +206,8 @@ images: "Obrázky" birthday: "Datum narození" registeredDate: "Datum registrace" location: "Lokace" +light: "Světlý" +dark: "Tmavý" lightThemes: "Světlý vzhled" darkThemes: "Tmavý vzhled" syncDeviceDarkMode: "Synchronizovat tmavý vzhled s nastavením Vašeho systému" @@ -217,6 +222,10 @@ folderName: "Název složky" createFolder: "Vytvořit složku" renameFolder: "Přejmenovat složku" deleteFolder: "Odstranit složku" +addFile: "Přidat soubor" +emptyFolder: "Tato složka je prázdná" +unableToDelete: "Nelze smazat" +inputNewFileName: "Zadejte nový název" copyUrl: "Kopírovat URL" rename: "Přejmenovat" avatar: "Avatar" @@ -224,6 +233,7 @@ banner: "Baner" nsfw: "NSFW" disconnectedFromServer: "Spojení bylo přerušeno" reload: "Aktualizovat" +doNothing: "Ignorovat" watch: "Sledovat" unwatch: "Přestat sledovat" accept: "Souhlasím" @@ -254,6 +264,17 @@ iconUrl: "Favicon URL" bannerUrl: "Baner URL" basicInfo: "Základní informace" hcaptcha: "hCaptcha" +hcaptchaSecretKey: "Tajný Klíč (Secret Key)" +recaptcha: "reCAPTCHA" +enableRecaptcha: "Zapnout ReCAPTCHu" +recaptchaSecretKey: "Tajný Klíč (Secret Key)" +antennas: "Antény" +manageAntennas: "Spravovat Antény" +name: "Jméno" +antennaSource: "Zdroj Antény" +enableServiceworker: "Povolit ServiceWorker" +caseSensitive: "Rozlišuje malá a velká písmena" +connectedTo: "Následující účty jsou připojeny" userList: "Seznamy" about: "Informace" aboutMisskey: "O Misskey" @@ -298,15 +319,70 @@ retype: "Zadejte znovu" noteOf: "{user} poznámky" inviteToGroup: "Pozvat do skupiny" invitations: "Pozvat" +tooShort: "Příliš krátké" +tooLong: "Příliš dlouhé" +weakPassword: "Slabé heslo" +normalPassword: "Dobré heslo" +strongPassword: "Silné heslo" +passwordMatched: "Hesla se schodují" +passwordNotMatched: "Hesla se neschodují" +signinWith: "Přihlásit se s {x}" +signinFailed: "Nelze se přihlásit. Zkontrolujte prosím své uživatelské jméno a heslo." +or: "Nebo" +language: "Jazyk" +youHaveNoGroups: "Nemáte žádné skupiny" +signinHistory: "Historie přihlášení" +category: "Kategorie" +tags: "Štítky" +createAccount: "Vytvořit účet" +fontSize: "Velikost písma" +openImageInNewTab: "Otevřít obrázek v novém panelu" +dashboard: "Přehled" +local: "Lokální" +total: "Celkem" +weekOverWeekChanges: "Týdně" +dayOverDayChanges: "Denně" +appearance: "Vzhled" +clientSettings: "Nastavení klienta" +accountSettings: "Nastavení účtu" +promotion: "Propagace" +promote: "Propagovat" +numberOfDays: "Počet dní" +chooseEmoji: "Vybrat emotikon" +unableToProcess: "Operace nebyla dokončena." +recentUsed: "Naposledy použité" +install: "Nainstalovat" +uninstall: "Odinstalovat" +installedApps: "Autorizované aplikace" +nothing: "Nic nebylo nalezeno" +lastUsedDate: "Poslední použití" +state: "Stav" +ascendingOrder: "Vzestupně" +descendingOrder: "Sestupně" +scratchpad: "Zápisník" +output: "Výstup" +script: "Skript" +deleteAllFiles: "Smazat všechny soubory" +deleteAllFilesConfirm: "Jste si jistí že chcete smazat všechny soubory?" +userSuspended: "Tomuto uživateli byl pozastaven účet." +sidebar: "Postranní panel" +addItem: "Přidat položku" +rooms: "Místnost" +inboxUrl: "Inbox URL" +deletedNote: "Odstraněné příspěvky" +invisibleNote: "Skryté příspěvky" smtpUser: "Uživatelské jméno" smtpPass: "Heslo" clearCache: "Vyprázdnit mezipaměť" info: "Informace" +user: "Uživatelé" _mfm: mention: "Zmínění" quote: "Citovat" emoji: "Vlastní emoji" search: "Vyhledávání" +_reversi: + total: "Celkem" _sidebar: icon: "Avatar" _theme: @@ -328,6 +404,7 @@ _visibility: home: "Domů" followers: "Sledující" _profile: + name: "Jméno" username: "Uživatelské jméno" _exportOrImport: followingList: "Sledovaní" @@ -371,5 +448,6 @@ _deck: _columns: notifications: "Oznámení" tl: "Časová osa" + antenna: "Antény" list: "Seznamy" mentions: "Zmínění" diff --git a/locales/de-DE.yml b/locales/de-DE.yml index 1ffeafcd73..4ed3343378 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -134,11 +134,11 @@ settingGuide: "Empfohlene Einstellung" cacheRemoteFiles: "Dateien von anderen Instanzen im Cache speichern" cacheRemoteFilesDescription: "Wenn diese Einstellung deaktiviert ist, werden Dateien anderer Instanzen direkt von dort geladen. Hierdurch wird Speicherplatz gespart, aber mehr Bandbreite verbraucht, da keine Vorschaubilder generiert werden." flagAsBot: "Als Bot markieren" -flagAsBotDescription: "Wenn dieser Account durch ein Programm gesteuert wird, setze diesen Haken. Falls aktiviert, agiert es als Flag für andere Entwickler um endlose Kettenreaktionen mit anderen Bots zu verhindern und lässt Misskey's interne Systeme diesen Account als Bot behandeln." +flagAsBotDescription: "Wenn dieses Benutzerkonto durch ein Programm gesteuert wird, setze diesen Haken. Falls aktiviert, agiert es als Flag für andere Entwickler um endlose Kettenreaktionen mit anderen Bots zu verhindern und lässt Misskey's interne Systeme dieses Benutzerkonto als Bot behandeln." flagAsCat: "Als Katze markieren" flagAsCatDescription: "Setze diese Flag um dieses Benutzerkonto als Katze zu markieren." autoAcceptFollowed: "Follow-Anfragen automatisch akzeptieren" -addAcount: "Benutzerkonto hinzufügen" +addAccount: "Benutzerkonto hinzufügen" loginFailed: "Login fehlgeschlagen" showOnRemote: "Auf Ursprungsinstanz ansehen" general: "Allgemein" @@ -349,7 +349,6 @@ antennaExcludeKeywords: "Schlüsselwörter, die ignoriert werden sollen" antennaKeywordsDescription: "Mit Leerzeichen für eine \"UND\"-Verknüpfung trennen, durch Zeilenumbrüche für eine \"ODER\"-Verknüpfung trennen." notifyAntenna: "Über neue Notizen benachrichtigen" withFileAntenna: "Nur Notizen mit Dateien" -serviceworker: "ServiceWorker" enableServiceworker: "ServiceWorker aktivieren" antennaUsersDescription: "Benutzernamen getrennt durch Zeilenumbrüche angeben" caseSensitive: "Groß-/Kleinschreibung unterscheiden" @@ -453,7 +452,7 @@ category: "Kategorie" tags: "Schlagwörter" docSource: "Quelle dieses Dokuments" createAccount: "Benutzerkonto erstellen" -existingAcount: "Bestehendes Benutzerkonto" +existingAccount: "Bestehendes Benutzerkonto" regenerate: "Regenerieren" fontSize: "Schriftgröße" noFollowRequests: "Du hast keine Follow-Anfragen" @@ -568,7 +567,7 @@ pluginTokenRequestedDescription: "Dieses Plugin wird die hier konfigurierten Ber notificationType: "Benachrichtigungsart" edit: "Bearbeiten" useStarForReactionFallback: "Verwende ★ falls das Reaktions-Emoji unbekannt ist" -emailConfig: "Email-Server Konfiguration" +emailServer: "Email-Server" enableEmail: "Email-Versand aktivieren" emailConfigInfo: "Zur Email-Bestätigung bei Registrierung und zum Zurücksetzen des Passworts verwendet" email: "Email" @@ -705,6 +704,7 @@ editCode: "Code bearbeiten" apply: "Anwenden" receiveAnnouncementFromInstance: "E-Mail-Benachrichtigungen von dieser Instanz empfangen" emailNotification: "E-Mail-Benachrichtigungen" +publish: "Veröffentlichen" inChannelSearch: "In Kanal suchen" useReactionPickerForContextMenu: "Reaktionsauswahl durch Rechtsklick öffnen" typingUsers: "{users} ist/sind am schreiben..." @@ -728,6 +728,28 @@ hideOnlineStatusDescription: "Das Verbergen deines Online-Statuses reduziert die online: "Online" active: "Aktiv" offline: "Offline" +notRecommended: "Nicht empfohlen" +botProtection: "Bot-Schutz" +selectAccount: "Benutzerkonto auswählen" +enabled: "Aktiviert" +disabled: "Deaktiviert" +user: "Benutzer" +administration: "Verwaltung" +accounts: "Benutzerkonten" +switch: "Wechseln" +noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert." +noBotProtectionWarning: "Bot-Schutz ist nicht konfiguriert." +configure: "Konfigurieren" +postToGallery: "Beitrag zu Galerie hinzufügen" +gallery: "Galerie" +recentPosts: "Neue Beiträge" +popularPosts: "Beliebte Beiträge" +shareWithNote: "Mit Notiz teilen" +_gallery: + my: "Meine Galerie" + liked: "Beiträge, die mir gefallen" + like: "Gefällt mir" + unlike: "\"Gefällt mir\" entfernen" _email: _follow: title: "Du hast einen neuen Follower" diff --git a/locales/en-US.yml b/locales/en-US.yml index b5f9ff8279..57ce0c2ac9 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -138,7 +138,7 @@ flagAsBotDescription: "If this account is controlled by a program, set this opti flagAsCat: "This account is a cat" flagAsCatDescription: "Toggle this flag on for this account to be marked as a cat." autoAcceptFollowed: "Automatically approve follow requests from users you're following" -addAcount: "Add Account" +addAccount: "Add account" loginFailed: "Failed to sign in" showOnRemote: "View on remote instance" general: "General" @@ -339,7 +339,7 @@ recaptcha: "reCAPTCHA" enableRecaptcha: "Enable reCAPTCHA" recaptchaSiteKey: "Site key" recaptchaSecretKey: "Secret key" -avoidMultiCaptchaConfirm: "Using multiple Captchas may cause interference. Would you like to disable the other Captcha? You can leave multiple Captchas enabled by press cancel." +avoidMultiCaptchaConfirm: "Using multiple Captchas may cause interferences. Would you like to disable the other Captcha? You can leave multiple Captchas enabled by pressing cancel." antennas: "Antennas" manageAntennas: "Manage Antennas" name: "Name" @@ -349,7 +349,6 @@ antennaExcludeKeywords: "Keywords to exclude" antennaKeywordsDescription: "Separate with spaces for AND condition. Separate with line breaks for OR." notifyAntenna: "Notify for new notes" withFileAntenna: "Filter only notes with file(s) attached" -serviceworker: "ServiceWorker" enableServiceworker: "Enable ServiceWorker" antennaUsersDescription: "List one username per line" caseSensitive: "Case sensitive" @@ -453,7 +452,7 @@ category: "Category" tags: "Tags" docSource: "Source of this document" createAccount: "Create account" -existingAcount: "Existing accounts" +existingAccount: "Existing account" regenerate: "Regenerate" fontSize: "Font size" noFollowRequests: "You don't have any pending follow requests" @@ -568,7 +567,7 @@ pluginTokenRequestedDescription: "This plugin will be able to use the permission notificationType: "Notification type" edit: "Edit" useStarForReactionFallback: "Use ★ as fallback if the reaction emoji is unknown" -emailConfig: "Email server configuration" +emailServer: "Email server" enableEmail: "Enable email distribution" emailConfigInfo: "Used to confirm your email during sign-up and if you forget your password" email: "Email" @@ -679,7 +678,7 @@ onlineUsersCount: "{n} people are online" nUsers: "{n} Users" nNotes: "{n} Notes" sendErrorReports: "Send error reports" -sendErrorReportsDescription: "When turned on, detailed error information will be shared with Misskey when a problem occurs, helping to improve the quality of Misskey." +sendErrorReportsDescription: "When turned on, detailed error information will be shared with Misskey when a problem occurs, helping to improve the quality of Misskey.\nThis may include informations such as your OS and its version, the kind of browser you're using, your activity history, etc." myTheme: "My theme" backgroundColor: "Background" accentColor: "Accent" @@ -705,6 +704,7 @@ editCode: "Edit code" apply: "Apply" receiveAnnouncementFromInstance: "Receive Email notifications from this instance" emailNotification: "Email notifications" +publish: "Publish" inChannelSearch: "Search in channel" useReactionPickerForContextMenu: "Open reaction picker on right-click" typingUsers: "{users} is/are typing..." @@ -728,6 +728,29 @@ hideOnlineStatusDescription: "Hiding your online status reduces the convenience online: "Online" active: "Active" offline: "Offline" +notRecommended: "Not recommended" +botProtection: "Bot Protection" +selectAccount: "Select account" +enabled: "Enabled" +disabled: "Disabled" +quickAction: "Quick action" +user: "Users" +administration: "Management" +accounts: "Accounts" +switch: "Switch" +noMaintainerInformationWarning: "Maintainer information is not configured." +noBotProtectionWarning: "Bot protection is not configured." +configure: "Configure" +postToGallery: "Post to Gallery" +gallery: "Gallery" +recentPosts: "Recent posts" +popularPosts: "Popular posts" +shareWithNote: "Share with note" +_gallery: + my: "My Gallery" + liked: "Liked Posts" + like: "Like" + unlike: "Undo like" _email: _follow: title: "You've got a new follower" diff --git a/locales/es-ES.yml b/locales/es-ES.yml index e9a0814276..9ad9d46661 100644 --- a/locales/es-ES.yml +++ b/locales/es-ES.yml @@ -137,7 +137,6 @@ flagAsBotDescription: "En caso de que esta cuenta fuera usada por un programa, a flagAsCat: "Esta cuenta es un gato" flagAsCatDescription: "En caso de que declare que esta cuenta es de un gato, active esta opción." autoAcceptFollowed: "Aceptar automáticamente las solicitudes de seguimiento de los usuarios que sigues" -addAcount: "Agregar cuenta" loginFailed: "Error al iniciar sesión." showOnRemote: "Ver en una instancia remota" general: "General" @@ -348,7 +347,6 @@ antennaExcludeKeywords: "Palabras clave para excluir" antennaKeywordsDescription: "Separar con espacios es una declaración AND, separar con una linea nueva es una declaración OR" notifyAntenna: "Notificar nueva nota" withFileAntenna: "Sólo notas con archivos adjuntados" -serviceworker: "ServiceWorker" enableServiceworker: "Activar ServiceWorker" antennaUsersDescription: "Elegir nombres de usuarios separados por una linea nueva" caseSensitive: "Distinguir mayúsculas de minúsculas" @@ -451,7 +449,6 @@ category: "Categoría" tags: "Etiqueta" docSource: "Fuente de este documento" createAccount: "Crear cuenta" -existingAcount: "Cuentas existentes" regenerate: "Regenerar" fontSize: "Tamaño de la letra" noFollowRequests: "No hay solicitudes de seguimiento" @@ -566,7 +563,6 @@ pluginTokenRequestedDescription: "Este plugin podrá usar los permisos descritos notificationType: "Tipo de notificación" edit: "Editar" useStarForReactionFallback: "En caso de que los emojis de reacciones no sean claros, usar en su lugar una estrella" -emailConfig: "Configuración del servidor de correos" enableEmail: "Activar el envío de correos electrónicos" emailConfigInfo: "Usar en caso de validación de correo electrónico y pedido de contraseña" email: "Correo" @@ -654,6 +650,10 @@ textColor: "Texto" value: "Valores" goBack: "Deseleccionar" info: "Información" +user: "Usuarios" +administration: "Administrar" +_gallery: + unlike: "Quitar me gusta" _email: _follow: title: "te ha seguido" diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index 199aa983fc..35a97c1456 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -138,7 +138,7 @@ flagAsBotDescription: "Si ce compte est géré de manière automatisée , défin flagAsCat: "Ce compte est un chat" flagAsCatDescription: "Activer l'option \" Je suis un chat \" pour ce compte." autoAcceptFollowed: "Accepter automatiquement les demandes d’abonnement venant d’utilisateur·rice·s que vous suivez" -addAcount: "Ajouter un compte" +addAccount: "Ajouter un compte" loginFailed: "Échec de la connexion" showOnRemote: "Voir sur l’instance distante" general: "Général" @@ -349,7 +349,6 @@ antennaExcludeKeywords: "Mots clés à exclure" antennaKeywordsDescription: "Séparer avec des espaces pour la condition AND. Séparer avec un saut de ligne pour une condition OR." notifyAntenna: "Je souhaite recevoir les notifications des nouvelles notes" withFileAntenna: "Notes ayant des attachements uniquement" -serviceworker: "ServiceWorker" enableServiceworker: "Activer ServiceWorker" antennaUsersDescription: "Saisissez un seul nom d’utilisateur·rice par ligne" caseSensitive: "Sensible à la casse" @@ -453,7 +452,7 @@ category: "Catégorie" tags: "Étiquettes" docSource: "Source de ce document" createAccount: "Créer un compte" -existingAcount: "Comptes existants" +existingAccount: "Compte existant" regenerate: "Générer à nouveau" fontSize: "Taille de la police" noFollowRequests: "Vous n’avez aucune demande d’abonnement en attente" @@ -487,7 +486,7 @@ objectStorageRegionDesc: "Spécifiez une région comme 'xx-east-1'. Si votre ser objectStorageUseSSL: "Utiliser SSL" objectStorageUseSSLDesc: "Désactivez cette option si vous n'utilisez pas HTTPS pour la connexion API" objectStorageUseProxy: "Se connecter via proxy" -objectStorageUseProxyDesc: "Désactivez cette option si vous n'utilisez pas Proxy pour la connexion API" +objectStorageUseProxyDesc: "Désactivez cette option si vous n'utilisez pas de proxy pour la connexion API" objectStorageSetPublicRead: "Régler sur « public » lors de l'envoi" serverLogs: "Journal du serveur" deleteAll: "Supprimer tout" @@ -541,8 +540,8 @@ enableInfiniteScroll: "Activer le défilement infini" visibility: "Visibilité" poll: "Sondage" useCw: "Masquer le contenu" -enablePlayer: "Activer le lecteur vidéo" -disablePlayer: "Désactiver le lecteur vidéo" +enablePlayer: "Ouvrir dans le lecteur vidéo" +disablePlayer: "Fermer le lecteur vidéo" expandTweet: "Étendre le tweet" themeEditor: "Éditeur de thèmes" description: "Description" @@ -568,7 +567,7 @@ pluginTokenRequestedDescription: "Ce plugin pourra utiliser les autorisations d notificationType: "Type de notifications" edit: "Editer" useStarForReactionFallback: "Utiliser ★ comme alternative si l’émoji de réaction est inconnu" -emailConfig: "Configuration du serveur email" +emailServer: "Serveur mail" enableEmail: "Activer la distribution de courriel" emailConfigInfo: "Utilisé pour confirmer votre adresse de courriel et la réinitialisation de votre mot de passe en cas d’oubli." email: "E-mail " @@ -601,7 +600,7 @@ useGlobalSettingDesc: "S'il est activé, les paramètres de notification de votr other: "Autre" regenerateLoginToken: "Régénérer le jeton de connexion" regenerateLoginTokenDescription: "Générer un nouveau jeton d'authentification. Cette opération ne devrait pas être nécessaire ; lors de la génération d'un nouveau jeton, tous les appareils seront déconnectés. " -setMultipleBySeparatingWithSpace: "Vous pouvez définir plus d’un, séparés par des espaces." +setMultipleBySeparatingWithSpace: "Vous pouvez en définir plusieurs, en les séparant par des espaces." fileIdOrUrl: "ID du fichier ou URL" chatOpenBehavior: "Comportement de la fenêtre de discussion lors de son ouverture" behavior: "Comportement" @@ -678,7 +677,7 @@ onlineUsersCount: "{n} utilisateur(s) en ligne" nUsers: "{n} utilisateur·rice·s" nNotes: "{n} Notes" sendErrorReports: "Envoyer les rapports d’erreur" -sendErrorReportsDescription: "Lorsqu'il est activé, des informations détaillées sur les erreurs sont partagées avec Misskey lorsqu'un problème survient, ce qui contribue à améliorer la qualité de Misskey." +sendErrorReportsDescription: "Si vous activez l'envoi des rapports d'erreur, vous contribuerez à améliorer la qualité de Misskey grâce au partage d'informations détaillées sur les erreurs lorsqu'un problème survient.\nCela inclut des informations telles que la version de votre système d'exploitation, le type de navigateur que vous utilisez, votre historique d'activité, etc." myTheme: "Mes thèmes" backgroundColor: "Arrière-plan" accentColor: "Accentuation" @@ -704,6 +703,7 @@ editCode: "Modifier le code" apply: "Appliquer" receiveAnnouncementFromInstance: "Recevoir les messages d'information de l'instance" emailNotification: "Notifications par mail" +publish: "Public" inChannelSearch: "Chercher dans le canal" useReactionPickerForContextMenu: "Clic-droit pour ouvrir le panneau de réactions" typingUsers: "{users} est en train d'écrire" @@ -722,10 +722,34 @@ info: "Informations" userInfo: "Informations sur l'utilisateur" unknown: "Inconnu" onlineStatus: "Statut" -hideOnlineStatus: "Toujours apparaître hors ligne" -hideOnlineStatusDescription: "Forcer votre statut à toujours apparaître hors ligne peut diminuer les performances de certaines fonctionnalités, telles que la Recherche." +hideOnlineStatus: "Se rendre invisible" +hideOnlineStatusDescription: "Rendre votre statut invisible peut diminuer les performances de certaines fonctionnalités, telles que la Recherche." online: "En ligne" offline: "Hors ligne" +notRecommended: "Déconseillé" +botProtection: "Protection contre les bots" +instanceBlocking: "Instances bloquées" +selectAccount: "Sélectionner un compte" +enabled: "Activé" +disabled: "Désactivé" +quickAction: "Actions rapides" +user: "Utilisateur·rice·s" +administration: "Gestion" +accounts: "Comptes" +switch: "Remplacer" +noMaintainerInformationWarning: "Informations administrateur non configurées." +noBotProtectionWarning: "La protection contre les bots n'est pas configurée." +configure: "Configurer" +postToGallery: "Publier dans la galerie" +gallery: "Galerie" +recentPosts: "Les plus récentes" +popularPosts: "Les plus consultées" +shareWithNote: "Partager dans une note" +_gallery: + my: "Mes publications" + liked: " Publications que j'ai aimées" + like: "J'aime" + unlike: "Je n’aime pas" _email: _follow: title: "Vous suit" @@ -877,11 +901,13 @@ _theme: funcKind: "Type de fonction" argument: "Argument" alpha: "Transparence" - darken: "Assombrir" + darken: "Sombre" + lighten: "Clair" inputConstantName: "Insérez un nom de constante" importInfo: "Vous pouvez importer un thème vers l’éditeur de thèmes en saisissant son code ici." deleteConstantConfirm: "Êtes-vous sûr·e de vouloir supprimer la constante {const} ?" keys: + accent: "Accentuation" bg: "Arrière-plan" fg: "Texte" focus: "Mise au point" @@ -908,6 +934,8 @@ _theme: cwBg: "Arrière-plan du CW" cwFg: "Texte du bouton CW" cwHoverBg: "Arrière-plan du bouton CW (survolé)" + toastBg: "Arrière-plan de la bulle de notification" + toastFg: "Texte de la bulle de notification" buttonBg: "Arrière-plan du bouton" buttonHoverBg: "Arrière-plan du bouton (survolé)" inputBorder: "Cadre de la zone de texte" @@ -915,6 +943,8 @@ _theme: driveFolderBg: "Arrière-plan du dossier de disque" badge: "Badge" messageBg: "Arrière plan de la discussion" + accentDarken: "Plus sombre" + accentLighten: "Plus clair" fgHighlighted: "Texte mis en évidence" _sfx: note: "Nouvelle note" @@ -1087,7 +1117,7 @@ _postForm: channelPlaceholder: "Publier vers le canal" _placeholders: a: "Quoi de neuf ?" - b: "Quoi de neuf ?" + b: "Il s'est passé quelque chose ?" c: "Qu’avez-vous en tête ?" d: "Désirez-vous publier quelques mots ?" e: "Écrivez ici" @@ -1111,31 +1141,31 @@ _exportOrImport: blockingList: "Comptes bloqués" userLists: "Listes" _charts: - federationInstancesIncDec: "Variation du nombre des instances fédérées" - federationInstancesTotal: "Nombre total des instances fédérées" + federationInstancesIncDec: "Variation du nombre d'instances fédérées" + federationInstancesTotal: "Nombre total d'instances fédérées" usersIncDec: "Variation du nombre d'utilisateur·rice·s" usersTotal: "Nombre des utilisateur·rice·s au total" activeUsers: "Utilisateur·rice·s actif·ve·s" notesIncDec: "Variation du nombre des notes" - localNotesIncDec: "Variation du nombre de notes local" - remoteNotesIncDec: "Variation du nombre d’notes distant" + localNotesIncDec: "Variation du nombre de notes locales" + remoteNotesIncDec: "Variation du nombre de notes distantes" notesTotal: "Nombre total des notes" filesIncDec: "Variation du nombre de fichiers" - filesTotal: "Nombre de fichiers au total" + filesTotal: "Nombre total de fichiers" storageUsageIncDec: "Variation de l'utilisation du stockage" storageUsageTotal: "Utilisation totale du stockage" _instanceCharts: requests: "Requêtes" users: "Variation du nombre d'utilisateur·rice·s" - usersTotal: "Nombre d'utilisateur·rice·s au total cumulé" - notes: "Variation du nombre des notes" + usersTotal: "Total cumulé du nombre d'utilisateur·rice·s" + notes: "Variation du nombre de notes" notesTotal: "Nombre total cumulé des notes" - ff: "Variation des abonné·e·s" - ffTotal: "Nombre d'abonné·e·s au total cumulé" + ff: "Variation des abonné·e·s / abonnements" + ffTotal: "Total cumulé du nombre d'abonné·e·s / abonnements" cacheSize: "Variation de la taille du cache" - cacheSizeTotal: "La taille du cache au total cumulé" + cacheSizeTotal: "Total cumulé de la taille du cache" files: "Variation du nombre de fichiers" - filesTotal: "Nombre de fichiers au total cumulé" + filesTotal: "Total cumulé du nombre de fichiers" _timelines: home: "Principal" local: "Local" @@ -1158,7 +1188,7 @@ _rooms: default: "Par défaut" washitsu: "Style japonnais" _furnitures: - milk: "Lait en carton" + milk: "Brique de lait" bed: "Lit" low-table: "Table basse" desk: "Bureau" @@ -1177,7 +1207,7 @@ _rooms: book: "Livre" book2: "Livre 2" piano: "Piano" - facial-tissue: "Mouchoirs en papier" + facial-tissue: "Boîte de mouchoirs" server: "Serveurs" moon: "Lune" corkboard: "Tableau en liège" @@ -1190,7 +1220,7 @@ _rooms: wall-clock: "Horloge murale" photoframe: "Cadre photo" cube: "Cube" - tv: "Téléviseur" + tv: "Télé" pinguin: "Pingouin" rubik-cube: "Cube de Rubik" poster-h: "Affiche (horizontale)" @@ -1206,13 +1236,13 @@ _rooms: _pages: newPage: "Créer une page" editPage: "Modifier une page" - readPage: "Voir la source" + readPage: "Affichage de la source en cours" created: "La page a été créée !" updated: "La page a été mise à jour !" - deleted: "La page a bien été supprimée" + deleted: "La page a été supprimée" pageSetting: "Paramètres de la Page" - nameAlreadyExists: "La URL de page spécifiée existe déjà" - invalidNameTitle: "La URL de la page spécifiée n’est pas valide" + nameAlreadyExists: "L'URL de page spécifiée existe déjà" + invalidNameTitle: "L'URL de page spécifiée n’est pas valide" invalidNameText: "Assurez-vous qu’il n’est pas vide" editThisPage: "Éditer cette page" viewSource: "Afficher la source" @@ -1227,21 +1257,21 @@ _pages: content: "Bloc de page" variables: "Variables" title: "Titre" - url: "URL de page" + url: "URL de la page" summary: "Résumé de page" alignCenter: "Centrée" hideTitleWhenPinned: "Masquer le titre de la page lorsque celle-ci est épinglée au profil" font: "Police de caractères" fontSerif: "Serif" fontSansSerif: "Sans Serif" - eyeCatchingImageSet: "Définir une image attirante" - eyeCatchingImageRemove: "Supprimer une image attirante" + eyeCatchingImageSet: "Définir une image attractive" + eyeCatchingImageRemove: "Supprimer l'image attractive" chooseBlock: "Ajouter un bloc" selectType: "Choisir un type" enterVariableName: "Veuillez entrer un nom pour votre variable" - variableNameIsAlreadyUsed: "Cette variable est déjà utilisée" + variableNameIsAlreadyUsed: "Ce nom de variable est déjà utilisé" contentBlocks: "Contenu" - inputBlocks: "Entrée" + inputBlocks: "Blocs d'entrée" specialBlocks: "Spécial" blocks: text: "Texte" @@ -1533,7 +1563,7 @@ _deck: swapUp: "Déplacer vers le haut" swapDown: "Déplacer vers le bas" stackLeft: "Empiler à gauche" - popRight: "Vers la droite" + popRight: "Extraire à droite" profile: "Profil" _columns: main: "Principale" diff --git a/locales/id-ID.yml b/locales/id-ID.yml index a6c4e80efe..ae810a0398 100644 --- a/locales/id-ID.yml +++ b/locales/id-ID.yml @@ -107,7 +107,6 @@ cacheRemoteFiles: "Tembolokkan berkas remote" flagAsBot: "Atur akun ini sebagai Bot" flagAsCat: "Atur akun ini sebagai kucing" autoAcceptFollowed: "Setujui otomatis permintaan mengikuti dari pengguna yang anda ikuti" -addAcount: "Tambahkan akun" loginFailed: "Gagal untuk masuk" showOnRemote: "Lihat profil asli" general: "Umum" @@ -213,6 +212,7 @@ invites: "Undang" invitations: "Undang" smtpUser: "Nama Pengguna" smtpPass: "Kata sandi" +user: "Pengguna" _email: _follow: title: "Sedang mengikuti" diff --git a/locales/it-IT.yml b/locales/it-IT.yml index 08aac507a1..1a73f40a34 100644 --- a/locales/it-IT.yml +++ b/locales/it-IT.yml @@ -47,7 +47,7 @@ deleteAndEditConfirm: "Vuoi davvero cancellare questa nota e scriverla di nuovo? addToList: "Aggiungi alla lista" sendMessage: "Invia messaggio" copyUsername: "Copia nome utente" -searchUser: "Cerca Utente" +searchUser: "Cerca utente" reply: "Rispondi" loadMore: "Mostra di più" showMore: "Mostra di più" @@ -136,7 +136,7 @@ flagAsBotDescription: "Se l'account esegue principalmente operazioni automatiche flagAsCat: "Io sono un gatto" flagAsCatDescription: "Abilita l'opzione \"Io sono un gatto\" per l'account." autoAcceptFollowed: "Accetta automaticamente le richieste di follow da utenti che già segui" -addAcount: "Aggiungi account" +addAccount: "Aggiungi account" loginFailed: "Accesso non riuscito" showOnRemote: "Sfoglia sull'istanza remota" general: "Generali" @@ -153,6 +153,9 @@ recipient: "Destinatario" annotation: "Descrizione" federation: "Federazione" instances: "Istanza" +latestRequestSentAt: "Ultima richiesta inviata" +latestRequestReceivedAt: "Ultima richiesta ricevuta" +latestStatus: "Ultimo stato" storageUsage: "Volume di dischi" charts: "Grafici" perHour: "All'ora" @@ -172,6 +175,7 @@ instanceInfo: "Informazioni sull'istanza" statistics: "Statistiche" clearQueue: "Svuota coda" clearQueueConfirmTitle: "Vuoi davvero svuotare la coda?" +clearQueueConfirmText: "Le note ancora non distribuite non verranno rilasciate. Solitamente, non è necessario eseguire questa operazione." clearCachedFiles: "Svuota cache" clearCachedFilesConfirm: "Vuoi davvero svuotare la cache da tutti i file remoti?" blockedInstances: "Istanze bloccate" @@ -329,6 +333,7 @@ recaptcha: "reCAPTCHA" enableRecaptcha: "Abilita reCAPTCHA" recaptchaSiteKey: "Chiave del sito" recaptchaSecretKey: "Chiave segreta" +avoidMultiCaptchaConfirm: "Utilizzare diversi Captcha può causare interferenze. Vuoi disattivare l'altro Captcha? Puoi lasciare diversi Captcha attivi premendo \"Cancella\"." antennas: "Antenne" manageAntennas: "Gestore delle antenne" name: "Nome" @@ -338,7 +343,6 @@ antennaExcludeKeywords: "Parole chiavi da escludere" antennaKeywordsDescription: "Separare con uno spazio indica la condizione \"E\". Separare con un'interruzzione riga indica la condizione \"O\"." notifyAntenna: "Invia notifiche delle nuove note" withFileAntenna: "Solo note con file in allegato" -serviceworker: "ServiceWorker" enableServiceworker: "Abilita ServiceWorker" antennaUsersDescription: "Inserisci solo un nome utente per riga" caseSensitive: "Sensibile alla distinzione tra maiuscole e minuscole" @@ -436,11 +440,12 @@ youHaveNoGroups: "Nessun gruppo" joinOrCreateGroup: "Puoi creare il tuo gruppo o essere invitat@ a gruppi che già esistono." noHistory: "Nessuna cronologia" signinHistory: "Cronologia di accesso all'account" +doing: "In corso..." category: "Categoria" tags: "Tag" docSource: "Sorgente della scheda" createAccount: "Crea il tuo account" -existingAcount: "Account esistente" +existingAccount: "Account esistente" regenerate: "Generare di nuovo" fontSize: "Dimensione carattere" noFollowRequests: "Non hai alcuna richiesta di follow" @@ -468,6 +473,9 @@ objectStoragePrefixDesc: "I file saranno conservati sotto la directory di questo objectStorageEndpoint: "Endpoint" objectStorageRegion: "Region" objectStorageUseSSL: "Usare SSL" +objectStorageUseProxy: "Usa proxy" +objectStorageUseProxyDesc: "Disabilita quest'opzione se non usi proxy per la connessione API." +objectStorageSetPublicRead: "Imposta \"visibilità pubblica\" al momento di caricare" serverLogs: "Log del server" deleteAll: "Cancella cronologia" showFixedPostForm: "Visualizzare la finestra di pubblicazione in cima alla timeline" @@ -497,7 +505,7 @@ scratchpad: "ScratchPad" output: "Uscita" script: "Script" disablePagesScript: "Disabilita AiScript nelle pagine" -updateRemoteUser: "Aggiornare le informazioni di utente remoto" +updateRemoteUser: "Aggiornare le informazioni di utente remot@" deleteAllFiles: "Elimina tutti i file" deleteAllFilesConfirm: "Vuoi davvero eliminare tutti i file?" removeAllFollowing: "Cancella tutti i follows" @@ -508,6 +516,10 @@ sidebar: "Barra laterale" divider: "Linea di separazione" addItem: "Aggiungi elemento" rooms: "Camera" +relays: "Ripetitori" +addRelay: "Aggiungi ripetitore" +inboxUrl: "Inbox URL" +addedRelays: "Ripetitori configurati" serviceworkerInfo: "Deve essere abilitato per le notifiche push. " deletedNote: "Nota eliminata" invisibleNote: "Nota invisibile" @@ -515,47 +527,77 @@ enableInfiniteScroll: "Abilita scorrimento infinito" visibility: "Visibilità" poll: "Sondaggio" useCw: "Nascondere media" +enablePlayer: "Apri in lettore video" +disablePlayer: "Chiudi lettore video" expandTweet: "Espandi tweet" themeEditor: "Editor di temi" description: "Descrizione" author: "Autore" leaveConfirm: "Ci sono delle modifiche ancora non salvate. Vuoi cancellarle?" manage: "Gestione" +plugins: "Estensioni" +deck: "Deck" +undeck: "Esci dal deck" useFullReactionPicker: "Usa la totalità del pannello di reazioni" width: "Larghezza" height: "Altezza" large: "Grande" medium: "Predefinito" small: "Piccolo" +generateAccessToken: "Genera token di accesso" +permission: "Autorizzazioni " enableAll: "Abilita tutto" disableAll: "Disabilita tutto" tokenRequested: "Autorizza accesso all'account" +pluginTokenRequestedDescription: "Il plugin potrà utilizzare le autorizzazioni impostate qui." notificationType: "Tipo di notifiche" edit: "Modifica" useStarForReactionFallback: "Se è sconosciuto l'emoji di reazione, usare la ★ come alternativa." -emailConfig: "Impostazioni server email" +emailServer: "Server email" +enableEmail: "Abilita consegna email" +emailConfigInfo: "Utilizzato per verificare il tuo indirizzo di posta elettronica e per reimpostare la tua password" email: "Email" +emailAddress: "Indirizzo di posta elettronica" +smtpConfig: "Impostazioni del server SMTP" smtpHost: "Server remoto" +smtpPort: "Porta" smtpUser: "Nome utente" smtpPass: "Password" +emptyToDisableSmtpAuth: "Lasciare il nome utente e la password vuoti per disabilitare la verifica SMTP" +smtpSecure: "Usare la porta SSL/TLS implicito per le connessioni SMTP" +smtpSecureInfo: "Disabilitare quando è attivo STARTTLS." +testEmail: "Testare la consegna di posta elettronica" wordMute: "Filtri parole" userSaysSomething: "{name} ha detto qualcosa" +makeActive: "Attiva" display: "Visualizza" copy: "Copia" +metrics: "Statistiche" +overview: "Anteprima" logs: "Log" +delayed: "Ritardo" database: "Base di dati" channel: "Canale" create: "Crea" notificationSetting: "Impostazioni notifiche" notificationSettingDesc: "Seleziona il tipo di notifiche da visualizzare." +useGlobalSetting: "Usa impostazioni generali" +useGlobalSettingDesc: "Se abilitato, le impostazioni notifiche dell'account verranno utilizzate. Se disabilitato, si possono definire diverse singole impostazioni." other: "Avanzate" +regenerateLoginToken: "Genera di nuovo un token di connessione" +regenerateLoginTokenDescription: "Genera un nuovo token di autenticazione. Solitamente questa operazione non è necessaria: quando si genera un nuovo token, tutti i dispositivi vanno disconnessi." fileIdOrUrl: "ID o URL del file" +chatOpenBehavior: "Comportamento della finestra di chat quando viene aperta" +behavior: "Comportamento" abuseReports: "Segnala" reportAbuse: "Segnala" reportAbuseOf: "Segnala {name}" send: "Inviare" openInNewTab: "Apri in una nuova scheda" +openInSideView: "Apri in vista laterale" +defaultNavigationBehaviour: "Navigazione preimpostata" editTheseSettingsMayBreakAccount: "Modificare queste impostazioni può danneggiare l'account." +instanceTicker: "Informazioni sull'istanza da cui vengono le note" waitingFor: "Aspettando {x}" random: "Casuale" system: "Sistema" @@ -567,6 +609,8 @@ optional: "Opzionale" createNewClip: "Nuova clip" public: "Pubblica" i18nInfo: "Misskey è tradotto in diverse lingue da volontari. Anche tu puoi contribuire su {link}." +manageAccessTokens: "Gestisci token di accesso" +accountInfo: "Informazioni account" notesCount: "Conteggio note" repliesCount: "Numero di risposte inviate" renotesCount: "Numero di note che hai ricondiviso" @@ -581,54 +625,139 @@ pollVotedCount: "Numero di voti ricevuti" yes: "Sì" no: "No" driveFilesCount: "Numero di file nel Drive" +driveUsage: "Utilizzazione del Drive" +noCrawle: "Rifiuta l'indicizzazione dai robot." +noCrawleDescription: "Richiedi che i motori di ricerca non indicizzino la tua pagina di profilo, le tue note, pagine, ecc." +alwaysMarkSensitive: "Segnare i media come sensibili per impostazione predefinita" +loadRawImages: "Visualizza le intere immagini allegate invece delle miniature." +disableShowingAnimatedImages: "Disabilita le immagini animate" +verificationEmailSent: "Una mail di verifica è stata inviata. Si prega di accedere al collegamento per compiere la verifica." +notSet: "Non impostato" +emailVerified: "Il tuo indirizzo email è stato verificato" noteFavoritesCount: "Conteggio note tra i preferiti" pageLikesCount: "Numero di pagine che ti piacciono" pageLikedCount: "Numero delle tue pagine che hanno ricevuto \"Mi piace\"" reversiCount: "Numero di partite a Reversi" contact: "Contatti" +useSystemFont: "Usa il carattere predefinito del sistema" clips: "Clip" experimentalFeatures: "Funzioni sperimentali" developer: "Sviluppatore" +makeExplorable: "Account visibile sulla pagina \"Esplora\"" +makeExplorableDescription: "Se disabiliti l'opzione, il tuo account non verrà visualizzato sulla pagina \"Esplora\"." showGapBetweenNotesInTimeline: "Mostrare un intervallo tra le note sulla timeline" duplicate: "Duplica" left: "Sinistra" center: "Centro" wide: "Largo" +reloadToApplySetting: "Le tue preferenze verranno impostate dopo il ricaricamento della pagina. Vuoi ricaricare adesso?" +showTitlebar: "Visualizza la barra del titolo" clearCache: "Svuota cache" onlineUsersCount: "{n} utenti online" nUsers: "{n} utenti" nNotes: "{n}Note" +sendErrorReports: "Invia segnalazioni di errori" +sendErrorReportsDescription: "Quando abilitato, se si verifica un problema, informazioni dettagliate sugli errori verranno condivise con Misskey in modo da aiutare a migliorare la qualità del software.\nCiò include informazioni come la versione del sistema operativo, il tipo di navigatore web che usi, la cronologia delle attività, ecc." myTheme: "I miei temi" backgroundColor: "Sfondo" textColor: "Testo" +saveAs: "Salva con nome" value: "Valore" +createdAt: "Data di creazione" +updatedAt: "Aggiornato il" saveConfirm: "Vuoi salvare le modifiche?" deleteConfirm: "Rimuovere?" +invalidValue: "Questo non è un valore valido." registry: "Registro" closeAccount: "Disattiva account" currentVersion: "Versione attuale" latestVersion: "Ultima versione" +youAreRunningUpToDateClient: "Stai usando la versione più recente del client." +newVersionOfClientAvailable: "Una nuova versione del tuo client è disponibile." +usageAmount: "In utilizzo" +capacity: "Capacità" +inUse: "In utilizzo" editCode: "Modifica codice" apply: "Applica" +receiveAnnouncementFromInstance: "Ricevi i messaggi informativi dall'istanza" emailNotification: "Eventi per notifiche via mail" +publish: "Pubblico" inChannelSearch: "Cerca in canale" useReactionPickerForContextMenu: "Cliccare sul tasto destro per aprire il pannello di reazioni" typingUsers: "{users} sta(nno) scrivendo" +jumpToSpecifiedDate: "Vai alla data " showingPastTimeline: "Stai visualizzando una vecchia timeline" +clear: "Cancella" +markAllAsRead: "Segna tutti come già letti" +goBack: "Indietro" +unlikeConfirm: "Non ti piace più?" +fullView: "Schermo intero" +quitFullView: "Esci dalla modalità a schermo intero" +addDescription: "Aggiungi descrizione" +userPagePinTip: "Qui puoi appuntare note, premendo \"Fissa sul profilo\" nel menù delle singole note." +notSpecifiedMentionWarning: "Sono menzionati account che non vengono inclusi fra i destinatari" info: "Informazioni" +userInfo: "Informazioni utente" +unknown: "Sconosciuto" +onlineStatus: "Stato di connessione" +hideOnlineStatus: "Stato invisibile" +hideOnlineStatusDescription: "Abilitare l'opzione di stato invisibile può guastare la praticità di singole funzioni, come la ricerca." +online: "Online" +offline: "Offline" +notRecommended: "Sconsigliato" +botProtection: "Protezione contro i bot" +selectAccount: "Scegli account" +enabled: "Attivo" +disabled: "Inattivo" +quickAction: "Azioni rapide" +user: "Utente" +administration: "Gestione" +accounts: "Account" +switch: "Sostituisci" +noMaintainerInformationWarning: "Le informazioni amministratore non sono impostate." +noBotProtectionWarning: "Nessuna protezione impostata contro i bot." +configure: "Imposta" +postToGallery: "Pubblicare nella galleria" +gallery: "Galleria" +recentPosts: "Le più recenti" +popularPosts: "Le più visualizzate" +shareWithNote: "Condividere in nota" +_gallery: + my: "Le mie pubblicazioni" + liked: "Pubblicazioni che mi piacciono" + like: "Mi piace!" + unlike: "Non mi piace più" _email: _follow: title: "Ha iniziato a seguirti" _receiveFollowRequest: title: "Hai ricevuto una richiesta di follow" +_plugin: + install: "Installa estensioni" + installWarn: "Si prega di installare soltanto estensioni che provengono da fonti affidabili." + manage: "Gestisci estensioni" _registry: key: "Dati" keys: "Dati" + domain: "Dominio" createKey: "Crea chiave" _aboutMisskey: + about: "Misskey è un software libero e open source, sviluppato da syuilo dal 2014." + contributors: "Principali sostenitori" + allContributors: "Tutti i sostenitori" source: "Codice sorgente" - morePatrons: "Ci sono molti altri che ci sostengono. Grazie 🥰" + translation: "Tradurre Misskey" + donate: "Sostieni Misskey" + morePatrons: "Apprezziamo sinceramente il supporto di tante altre persone. Grazie mille! 🥰" + patrons: "Sostenitori" +_nsfw: + respect: "Nascondere i media segnati come sensibli" + ignore: "Visualizzare i media segnati come sensibili" + force: "Nascondere tutti i media" _mfm: + cheatSheet: "Bigliettino MFM" + intro: "MFM è un linguaggio Markdown particolare che si può usare in diverse parti di Misskey. Qui puoi visualizzare a colpo d'occhio tutta la sintassi MFM utile." + dummy: "Il Fediverso si espande con Misskey" mention: "Menzioni" mentionDescription: "Si può menzionare un utente specifico digitando il suo nome utente subito dopo il segno @." hashtag: "Hashtag" @@ -643,7 +772,9 @@ _mfm: search: "Cerca" blur: "Sfocatura" font: "Tipo di carattere" + fontDescription: "Puoi scegliere il tipo di carattere per il contenuto." _reversi: + reversi: "Reversi" gameSettings: "Impostazioni di gioco" botSettings: "Opzioni del bot" black: "Nero" @@ -654,6 +785,10 @@ _instanceTicker: none: "Nascondi" remote: "Mostra solo per gli/le utenti remotə" always: "Mostra sempre" +_serverDisconnectedBehavior: + reload: "Ricarica automaticamente" + dialog: "Apri avviso in finestra" + quiet: "Visualizza avviso in modo discreto" _channel: create: "Nuovo canale" edit: "Gerisci canale" @@ -665,12 +800,17 @@ _channel: usersCount: "{n} partecipanti" notesCount: "{n} note" _sidebar: + full: "Intera" icon: "Icone" hide: "Nascondere" _wordMute: - muteWords: "Parole da silenziare" + muteWords: "Parole da filtrare" muteWordsDescription: "Separare con uno spazio indica la condizione \"E\". Separare con un'interruzzione riga indica la condizione \"O\"." muteWordsDescription2: "Metti le parole chiavi tra slash per usare espressioni regolari (regexp)." + softDescription: "Nascondi della timeline note che rispondono alle condizioni impostate qui." + hardDescription: "Impedisci alla timeline di caricare le note che rispondono alle condizioni impostate qui. Inoltre, le note scompariranno in modo irreversibile, anche se le condizioni verranno successivamente rimosse." + soft: "Moderato" + hard: "Severo" mutedNotes: "Note silenziate" _theme: explore: "Esplora temi" @@ -712,8 +852,22 @@ _theme: mention: "Menzioni" renote: "Rinota" divider: "Interruzione di linea" + infoFg: "Testo di informazioni" + infoWarnBg: "Sfondo degli avvisi" + infoWarnFg: "Testo di avviso" + cwBg: "Sfondo del CW" + cwFg: "Testo del pulsante CW" + cwHoverBg: "Sfondo del pulsante CW (sorvolato)" + toastBg: "Sfondo di notifica a comparsa" + toastFg: "Testo di notifica a comparsa" + buttonBg: "Sfondo del pulsante" + buttonHoverBg: "Sfondo del pulsante (sorvolato)" + inputBorder: "Inquadra casella di testo" + listItemHoverBg: "Sfondo della voce di elenco (sorvolato)" + driveFolderBg: "Sfondo della cartella di disco" _sfx: note: "Nota" + noteMy: "Mia nota" notification: "Notifiche" chat: "Messaggi" antenna: "Ricezione dell'antenna" @@ -748,7 +902,7 @@ _tutorial: step4_1: "Hai pubblicato qualcosa?" step4_2: "Se puoi visualizzare la tua nota sulla timeline, ce l'hai fatta!" step5_1: "Adesso, cerca di seguire altre persone per vivacizzare la tua timeline. " - step5_2: "La pagina {featured} mostra le note di tendenza su questa istanza e, sfogliandole, magari toverai degli account che ti piacciono e che vorrai seguire. Oppure, potrai trovare utenti popolari usando {explore}." + step5_2: "La pagina {featured} mostra le note di tendenza su questa istanza, e magari ti aiuterà a trovare account che ti piacciono e che vorrai seguire. Oppure, potrai trovare utenti popolari usando {explore}." step5_3: "Per seguire altrə utenti, clicca sul loro avatar per aprire la pagina di profilo dove puoi premere il pulsante \"Seguire\". " step5_4: "Alcunə utenti scelgono di confermare manualmente le richieste di follow che ricevono, quindi a seconda delle persone potrebbe volerci un pò prima che la tua richiesta sia accolta." step6_1: "Ora, se puoi visualizzare le note di altrə utenti sulla tua timeline, ce l'hai fatta!" @@ -757,6 +911,8 @@ _tutorial: step7_1: "Complimenti! Sei arrivat@ alla fine dell'esercitazione di base su come usare Misskey. " step7_2: "Se vuoi saperne di più su Misskey, puoi dare un'occhiata alla sezione {help}." step7_3: "Da ultimo, buon divertimento su Misskey! 🚀" +_2fa: + registerDevice: "Aggiungi dispositivo" _permissions: "read:blocks": "Visualizza gli account bloccati" "write:blocks": "Gestisci gli account bloccati" @@ -775,6 +931,8 @@ _permissions: "write:user-groups": "Gestisci gruppi di utenti" "read:channels": "Visualizza canali" "write:channels": "Gerisci canali" +_auth: + shareAccess: "Autorizzare「{name}」ad accedere al tuo account?" _antennaSources: all: "Tutte le note" homeTimeline: "Note dagli utenti che segui" @@ -801,9 +959,11 @@ _widgets: photos: "Foto" digitalClock: "Orologio digitale" federation: "Federazione" + postForm: "Finestra di pubblicazione" button: "Pulsante" onlineUsers: "Utenti online" jobQueue: "Coda di lavoro" + serverMetric: "Statistiche server" _cw: hide: "Nascondere" show: "Mostra di più" @@ -831,13 +991,24 @@ _postForm: replyPlaceholder: "Nota la tua risposta.." quotePlaceholder: "Cita Nota..." channelPlaceholder: "Pubblica in canale" + _placeholders: + a: "Che succede?" + b: "È successo qualcosa?" + c: "Che cos'hai in mente?" + d: "Vuoi dire qualcosa?" + e: "Scrivi qualcosa qui" + f: "Aspettando che scriva..." _profile: name: "Nome" username: "Nome utente" description: "Bio" + youCanIncludeHashtags: "Puoi anche includere hashtag." metadata: "Metadati" + metadataEdit: "Modifica informazioni aggiuntive" + metadataDescription: "Puoi pubblicare fino a quattro informazioni aggiuntive sul profilo." metadataLabel: "Etichetta" metadataContent: "Contenuto" + changeAvatar: "Modifica immagine profilo" changeBanner: "Cambia intestazione" _exportOrImport: allNotes: "Tutte le note" @@ -846,67 +1017,136 @@ _exportOrImport: blockingList: "Account bloccati" userLists: "Liste" _charts: + federationInstancesIncDec: "Variazione del numero di istanze federate" + federationInstancesTotal: "Numero totale di istanze federate" usersIncDec: "Variazione del numero di utenti" usersTotal: "Numero totale di utenti" activeUsers: "Numero di utenti attivi" + notesIncDec: "Variazione del numero di note" + localNotesIncDec: "Variazione del numero di note locali" + remoteNotesIncDec: "Variazione del numero di note distanti" notesTotal: "Conteggio totale di note" + filesIncDec: "Variazione del numero dei file" + filesTotal: "Numero totale di file" + storageUsageIncDec: "Variazione dell'utilizzo dell'immagazzinamento" + storageUsageTotal: "Utilizzo totale dell'immagazzinamento" _instanceCharts: + requests: "Richieste" users: "Variazione del numero di utenti" usersTotal: "Totale cumulativo di utenti" + notes: "Variazione del numero di note" + notesTotal: "Totale cumulato di note" + ff: "Variazione dei follow/ follower" + ffTotal: "Totale cumulato dei follow/ follower" + cacheSize: "Variazione dello spazio occupato dalla cache" + cacheSizeTotal: "Totale cumulato dello spazio occupato dalla cache" + files: "Variazione del numero di file" + filesTotal: "Totale cumulato del numero di file" _timelines: home: "Home" local: "Locale" social: "Sociale" + global: "Federata" _rooms: roomOf: "Camera di {user}" + addFurniture: "Disponi mobilia" + translate: "Sposta" + rotate: "Ruota" + exit: "Indietro" + remove: "Togli" + clear: "Rimuovi tutto" + clearConfirm: "Sei sicur@ di voler rimuovere tutti i mobili dalla tua camera?" + leaveConfirm: "Hai fatto modifiche ancora non salvate. Vuoi davvero uscire?" + chooseImage: "Seleziona immagine" + roomType: "Tipo di stanza" + carpetColor: "Colore del suolo" _roomType: default: "Predefinito" washitsu: "Washitsu" _furnitures: milk: "Cartone del latte" bed: "Letto" - low-table: "Tavolino Coffee" + low-table: "Tavolino" desk: "Tavolo" chair: "Sedia" chair2: "Sedia 2" fan: "Ventilatore" - pc: "PC" + pc: "Computer" plant: "Pianta da appartamento" plant2: "Pianta da appartamento2" eraser: "Gomma" pencil: "Matita" pudding: "Pudding" + cardboard-box: "Scatola di cartone" + cardboard-box2: "Scatola di cartone 2" + cardboard-box3: "Scatola di cartone 3" book: "Libro" book2: "Libro2" piano: "Pianoforte" + facial-tissue: "Scatola di fazzolettini" server: "Server" moon: "Luna" corkboard: "Bacheca" mousepad: "Tappetino per il mouse" monitor: "Monitor " keyboard: "Tastiera" + carpet-stripe: "Tappeto (a strisce)" mat: "Zerbino" color-box: "Libreria" wall-clock: "Orologio da parete" photoframe: "Cornice" cube: "Cubo" - tv: "Televisore" + tv: "TV" pinguin: "Pinguino" + rubik-cube: "Cubo di Rubik" + poster-h: "Poster (orizzontale)" + poster-v: "Poster (verticale)" + sofa: "Divano" + spiral: "Scale a chiocciola" bin: "Cestino" cup-noodle: "Noodle istantanei" + holo-display: "Visualizzazione olografica" + energy-drink: "Bevanda energetica" + doll-ai: "Bambola Ai" + banknote: "Mazzetta di banconote" _pages: + newPage: "Crea pagina" + editPage: "Modifica pagina" + readPage: "Visualizzando fonte " created: "Pagina creata!" + updated: "Pagina aggiornata con successo!" + deleted: "Pagina eliminata" pageSetting: "Impostazioni pagina" + nameAlreadyExists: "Esiste già una pagina con lo stesso URL." + invalidNameTitle: "L'URL di pagina definito non è valido" + invalidNameText: "Verifica che il campo non è vuoto" + editThisPage: "Modifica questa pagina" viewSource: "Visualizza sorgente" + viewPage: "Visualizza pagina" like: "Mi piace" unlike: "Togli Mi piace" + my: "Le mie pagine" + liked: "Pagine che mi piacciono" featured: "Popolari" + contents: "Contenuto" content: "Blocco di pagina" variables: "Variabili" title: "Titolo" + url: "URL della pagina" + summary: "Riassunto di pagina" hideTitleWhenPinned: "Nascondere il titolo pagina quando è fissata in cima al profilo." font: "Tipo di carattere" + fontSerif: "Serif" + fontSansSerif: "Sans serif" + eyeCatchingImageSet: "Imposta un'immagine attrattiva" + eyeCatchingImageRemove: "Elimina l'immagine attrattiva" chooseBlock: "Aggiungi blocco" + selectType: "Seleziona tipo" + enterVariableName: "Digita un nome di variabile" + variableNameIsAlreadyUsed: "Esiste già una variabile con lo stesso nome" + contentBlocks: "Contenuto" + inputBlocks: "Blocchi di input" + specialBlocks: "Speciale" blocks: text: "Testo" textarea: "Area di testo" @@ -916,16 +1156,20 @@ _pages: if: "Se" _if: variable: "Variabili" + post: "Finestra di pubblicazione" _post: text: "Contenuto" + textInput: "Immissione testo" _textInput: name: "Nome della variabile" text: "Titolo" default: "Valore predefinito" + textareaInput: "Immissione testo a più righe" _textareaInput: name: "Nome della variabile" text: "Titolo" default: "Valore predefinito" + numberInput: "Immissione numerica" _numberInput: name: "Nome della variabile" text: "Titolo" @@ -938,18 +1182,35 @@ _pages: id: "ID nota" idDescription: "Qui puoi anche incollare l'URL della nota che vuoi impostare." detailed: "Visualizzazione dettagliata" + switch: "Interruttore" _switch: name: "Nome della variabile" text: "Titolo" default: "Valore predefinito" + counter: "Contatore" _counter: name: "Nome della variabile" text: "Titolo" + inc: "Valore da aggiungere" _button: text: "Titolo" + colored: "Colorato" + action: "Operazione da eseguire quando viene premuto il pulsante" _action: + dialog: "Visualizzare una finestra di dialogo" _dialog: content: "Contenuto" + resetRandom: "Ripristinare un numero aleatorio" + pushEvent: "Inviare evento" + _pushEvent: + event: "Nome evento" + message: "Messaggio da visualizzare quando abilitato" + variable: "Variabile da inviare" + no-variable: "Nessun contenuto" + callAiScript: "Chiamare AiScript" + _callAiScript: + functionName: "Nome della funzione" + radioButton: "Opzioni" _radioButton: name: "Nome della variabile" title: "Titolo" @@ -963,6 +1224,8 @@ _pages: list: "Liste" blocks: text: "Testo" + multiLineText: "Testo (a più righe)" + textList: "Lista di testo" _strLen: arg1: "Testo" _strPick: @@ -1017,13 +1280,18 @@ _pages: arg2: "B" _if: arg1: "Se" + arg2: "Se" random: "Aleatorietà" _randomPick: arg1: "Liste" _dailyRandomPick: arg1: "Liste" + _seedRandom: + arg2: "Probabilità" _seedRandomPick: arg2: "Liste" + _DRPWPM: + arg1: "Lista di testo" _pick: arg1: "Liste" _listLen: @@ -1037,6 +1305,7 @@ _pages: types: string: "Testo" array: "Liste" + stringArray: "Lista di testo" _notification: fileUploaded: "File caricato correttamente" youGotMention: "{name} ti ha menzionato" @@ -1064,7 +1333,21 @@ _notification: groupInvited: "Invito a un gruppo" app: "Notifiche da applicazioni" _deck: + alwaysShowMainColumn: "Mostra sempre la colonna principale" + columnAlign: "Allineare colonne" + columnMargin: "Margine tra le colonne" + columnHeaderHeight: "Dimensioni dell'intestazione della colonna" + addColumn: "Aggiungi colonna" + swapLeft: "Sposta a sinistra" + swapRight: "Sposta a destra" + swapUp: "Sposta in alto" + swapDown: "Sposta in basso" + stackLeft: "Impila a sinistra" + popRight: "Estrai a destra" + profile: "Profilo" _columns: + main: "Principale" + widgets: "Widget" notifications: "Notifiche" tl: "Timeline" antenna: "Antenne" diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index a92099a96c..53a279e306 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -704,6 +704,7 @@ editCode: "コードを編集" apply: "適用" receiveAnnouncementFromInstance: "インスタンスからのお知らせを受け取る" emailNotification: "メール通知" +publish: "公開" inChannelSearch: "チャンネル内検索" useReactionPickerForContextMenu: "右クリックでリアクションピッカーを開く" typingUsers: "{users}が入力中" @@ -741,6 +742,17 @@ switch: "切り替え" noMaintainerInformationWarning: "管理者情報が設定されていません。" noBotProtectionWarning: "Bot防御が設定されていません。" configure: "設定する" +postToGallery: "ギャラリーへ投稿" +gallery: "ギャラリー" +recentPosts: "最近の投稿" +popularPosts: "人気の投稿" +shareWithNote: "ノートで共有" + +_gallery: + my: "自分の投稿" + liked: "いいねした投稿" + like: "いいね!" + unlike: "いいね解除" _email: _follow: diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml index c58e51cb9e..19ee30a4c9 100644 --- a/locales/ja-KS.yml +++ b/locales/ja-KS.yml @@ -138,7 +138,6 @@ flagAsBotDescription: "もしこのアカウントがプログラムによって flagAsCat: "Catやで" flagAsCatDescription: "ワレ、猫ちゃんならこのフラグをつけてみ?" autoAcceptFollowed: "フォローしとるユーザーからのフォローリクエストを勝手に許可しとく" -addAcount: "アカウント追加" loginFailed: "ログインに失敗してしもうた…" showOnRemote: "リモートで見る" general: "全般" @@ -347,7 +346,6 @@ antennaExcludeKeywords: "除外キーワード" antennaKeywordsDescription: "スペースで区切ったるとAND指定で、改行で区切ったるとOR指定や" notifyAntenna: "新しいノートを追加すんで" withFileAntenna: "なんか添付されたノートだけ" -serviceworker: "ServiceWorker" enableServiceworker: "ServiceWorkerをつこて" antennaUsersDescription: "ユーザー名を改行で区切ったってな" caseSensitive: "大文字と小文字は別もんや" @@ -448,7 +446,6 @@ category: "カテゴリ" tags: "タグ" docSource: "このドキュメントのソース" createAccount: "アカウントを作成" -existingAcount: "既存のアカウント" regenerate: "再生成" fontSize: "フォントサイズ" noFollowRequests: "フォロー申請はあらへんで" @@ -541,7 +538,6 @@ large: "大" medium: "中" small: "小" edit: "編集" -emailConfig: "メールサーバー設定" enableEmail: "メール配信を受け取る" emailConfigInfo: "メールアドレスの確認とかパスワードリセットの時に使うで" email: "メール" @@ -619,6 +615,7 @@ textColor: "文字" saveAs: "名前を付けて保存" advanced: "高度" value: "値" +createdAt: "作成した日" updatedAt: "更新日時" saveConfirm: "保存するで?" deleteConfirm: "ホンマに削除するで?" @@ -641,8 +638,13 @@ typingUsers: "{users}が今書きよるで" jumpToSpecifiedDate: "特定の日付にジャンプ" showingPastTimeline: "過去のタイムラインを表示してるで" clear: "クリア" +markAllAsRead: "もうみな読んでもうたわ" goBack: "戻る" info: "情報" +user: "ユーザー" +administration: "管理" +_gallery: + unlike: "良くないわ" _email: _follow: title: "フォローされたで" diff --git a/locales/kn-IN.yml b/locales/kn-IN.yml index cfbb59225e..fd52842b2c 100644 --- a/locales/kn-IN.yml +++ b/locales/kn-IN.yml @@ -58,6 +58,7 @@ instances: "ನಿದರ್ಶನ" remove: "ಅಳಿಸು" smtpUser: "ಬಳಕೆಹೆಸರು" smtpPass: "ಗುಪ್ತಪದ" +user: "ಬಳಕೆದಾರ" _email: _follow: title: "ಹಿಂಬಾಲಿಸಿದರು" diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index 972169c244..024faa45a3 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -138,7 +138,7 @@ flagAsBotDescription: "이 계정을 자동화된 수단으로 운용할 경우 flagAsCat: "나는 고양이다냥" flagAsCatDescription: "이 계정이 고양이라면 활성화 해주세요." autoAcceptFollowed: "팔로우 중인 유저로부터의 팔로우 요청을 자동 수락" -addAcount: "계정 추가" +addAccount: "계정 추가" loginFailed: "로그인에 실패했습니다" showOnRemote: "리모트에서 보기" general: "일반" @@ -349,7 +349,6 @@ antennaExcludeKeywords: "제외할 키워드" antennaKeywordsDescription: "공백으로 구분하는 경우 AND, 줄바꿈으로 구분하는 경우 OR로 지정됩니다" notifyAntenna: "새로운 노트를 알림" withFileAntenna: "파일이 첨부된 노트만" -serviceworker: "ServiceWorker" enableServiceworker: "ServiceWorker 사용" antennaUsersDescription: "유저명을 한 줄에 한 명씩 적습니다" caseSensitive: "대소문자를 구분" @@ -453,7 +452,7 @@ category: "카테고리" tags: "태그" docSource: "이 문서의 소스" createAccount: "계정 만들기" -existingAcount: "기존 계정" +existingAccount: "기존 계정" regenerate: "재생성" fontSize: "글자 크기" noFollowRequests: "처리되지 않은 팔로우 요청이 없습니다" @@ -568,7 +567,7 @@ pluginTokenRequestedDescription: "이 플러그인은 여기서 설정한 권한 notificationType: "알림 유형" edit: "편집" useStarForReactionFallback: "알 수 없는 리액션 이모지 대신 ★ 사용" -emailConfig: "메일 서버 설정" +emailServer: "메일 서버" enableEmail: "이메일 송신 기능 활성화" emailConfigInfo: "가입 시 메일 주소 확인이나 비밀번호 초기화 시에 사용합니다." email: "이메일" @@ -705,6 +704,7 @@ editCode: "코드 수정" apply: "적용" receiveAnnouncementFromInstance: "이 인스턴스의 알림을 이메일로 수신할게요" emailNotification: "메일 알림" +publish: "게시" inChannelSearch: "채널에서 검색" useReactionPickerForContextMenu: "우클릭하여 리액션 선택기 열기" typingUsers: "{users} 님이 입력하고 있어요.." @@ -726,8 +726,32 @@ onlineStatus: "온라인 상태" hideOnlineStatus: "온라인 상태 숨기기" hideOnlineStatusDescription: "온라인 상태를 숨기면, 검색과 같은 일부 기능에 영향을 미칠 수 있습니다." online: "온라인" -active: "활동 중" +active: "최근에 활동함" offline: "오프라인" +notRecommended: "추천하지 않음" +botProtection: "Bot 방어" +instanceBlocking: "인스턴스 차단" +selectAccount: "계정 선택" +enabled: "활성화" +disabled: "비활성화" +quickAction: "빠른 동작" +user: "유저" +administration: "관리" +accounts: "계정" +switch: "전환" +noMaintainerInformationWarning: "관리자 정보가 설정되어 있지 않습니다." +noBotProtectionWarning: "Bot 방어가 설정되어 있지 않습니다." +configure: "설정하기" +postToGallery: "갤러리에 업로드" +gallery: "갤러리" +recentPosts: "최근 포스트" +popularPosts: "인기 포스트" +shareWithNote: "노트로 공유" +_gallery: + my: "내 갤러리" + liked: "좋아요 한 갤러리" + like: "좋아요!" + unlike: "좋아요 취소" _email: _follow: title: "새로운 팔로워가 있습니다" diff --git a/locales/pl-PL.yml b/locales/pl-PL.yml index 9acf8aaece..3b4b53bce4 100644 --- a/locales/pl-PL.yml +++ b/locales/pl-PL.yml @@ -1,6 +1,7 @@ --- _lang_: "język polski" headlineMisskey: "Sieć połączona wpisami" +introMisskey: "Misskey jest serwisem mikroblogowym typu open source.\nMisskey to opensource'owy serwis mikroblogowy, w którym możesz tworzyć \"notatki\", aby dzielić się tym, co się dzieje i opowiadać wszystkim o sobie.\nMożesz również użyć funkcji \"Reakcje\", aby szybko dodać własne reakcje do notatek innych użytkowników👍.\nOdkrywaj nowy świat🚀!" monthAndDay: "{month}-{day}" search: "Szukaj" notifications: "Powiadomienia" @@ -61,7 +62,9 @@ import: "Importuj" export: "Eksportuj" files: "Pliki" download: "Pobierz" +driveFileDeleteConfirm: "Czy chcesz usunąć plik \"{name}\"? Zniknie również notatka, do której dołączony jest ten plik." unfollowConfirm: "Czy na pewno chcesz przestać obserwować {name}?" +exportRequested: "Zażądałeś eksportu. Może to zająć trochę czasu. Po zakończeniu eksportu zostanie on dodany do Twoich \"dysków\"." lists: "Listy" noLists: "Nie masz żadnych list" note: "Utwórz wpis" @@ -133,7 +136,6 @@ flagAsBot: "To konto jest botem" flagAsCat: "To konto jest kotem" flagAsCatDescription: "Przełącz tę opcję, aby konto było oznaczone jako kot." autoAcceptFollowed: "Automatycznie przyjmuj prośby o możliwość obserwacji od użytkowników, których obserwujesz" -addAcount: "Dodaj konto" loginFailed: "Nie udało się zalogować" showOnRemote: "Zobacz na zdalnej instancji" general: "Ogólne" @@ -331,7 +333,6 @@ name: "Nazwa" antennaSource: "Źródło Anteny" antennaExcludeKeywords: "Wykluczone słowa kluczowe" withFileAntenna: "Filtruj tylko wpisy z załączonym plikiem" -serviceworker: "ServiceWorker" enableServiceworker: "Włącz ServiceWorker" antennaUsersDescription: "Wypisz po jednej nazwie użytkownika w linii" caseSensitive: "Wielkość liter ma znaczenie" @@ -431,7 +432,6 @@ category: "Kategoria" tags: "Tagi" docSource: "Źródło tego dokumentu" createAccount: "Utwórz konto" -existingAcount: "Istniejące konta" regenerate: "Wygeneruj ponownie" fontSize: "Rozmiar czcionki" noFollowRequests: "Nie masz żadnych oczekujących próśb o możliwość obserwacji" @@ -540,7 +540,6 @@ pluginTokenRequestedDescription: "Ta wtyczka będzie mogła korzystać z ustawio notificationType: "Rodzaj powiadomień" edit: "Edytuj" useStarForReactionFallback: "Użyj ★ jako zapasowego emoji, gdy emoji reakcji jest nieznane" -emailConfig: "Konfiguracja serwera e-mail" enableEmail: "Włącz dostarczanie wiadomości e-mail" emailConfigInfo: "Wykorzystywany do potwierdzenia adresu e-mail w trakcie rejestracji, lub gdy zapomnisz hasła" email: "Adres e-mail" @@ -646,6 +645,10 @@ textColor: "Tekst" value: "Wartość" goBack: "Wróć" info: "Informacje" +user: "Użytkownicy" +administration: "Zarządzanie" +_gallery: + unlike: "Cofnij polubienie" _email: _follow: title: "Zaobserwował(a) Cię" diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml index 57fa366f5d..40372658e0 100644 --- a/locales/ru-RU.yml +++ b/locales/ru-RU.yml @@ -138,7 +138,7 @@ flagAsBotDescription: "Включите, если этот аккаунт упр flagAsCat: "Аккаунт кота" flagAsCatDescription: "Включите, и этот аккаунт будет помечен как кошачий." autoAcceptFollowed: "Принимать подписчиков автоматически" -addAcount: "Добавить аккаунт" +addAccount: "Добавить учётную запись" loginFailed: "Неудачная попытка входа" showOnRemote: "Перейти к оригиналу на сайт" general: "Общее" @@ -349,7 +349,6 @@ antennaExcludeKeywords: "Исключения" antennaKeywordsDescription: "Пишите слова через пробел в одной строке, чтобы ловить их появление вместе; на отдельных строках располагайте слова, или группы слов, чтобы ловить любые из них." notifyAntenna: "Уведомлять о новых заметках" withFileAntenna: "Только заметки с вложениями" -serviceworker: "ServiceWorker" enableServiceworker: "Включить ServiceWorker" antennaUsersDescription: "Пишите каждое название аккаута на отдельной строке" caseSensitive: "С учётом регистра" @@ -453,7 +452,7 @@ category: "Категория" tags: "Метки" docSource: "Источник документа" createAccount: "Новая учётная запись" -existingAcount: "Уже существующий" +existingAccount: "Существующая учётная запись" regenerate: "Создать повторно" fontSize: "Размер шрифта" noFollowRequests: "Нерассмотренные запросы на подписку отсутствуют" @@ -568,7 +567,7 @@ pluginTokenRequestedDescription: "Это расширение сможет по notificationType: "Тип уведомления" edit: "Изменить" useStarForReactionFallback: "Ставить ★ в качестве реакции вместо неизвестного эмодзи" -emailConfig: "Настройки почтового сервера" +emailServer: "Сервер электронной почты" enableEmail: "Включить обмен электронной почтой" emailConfigInfo: "Используется для подтверждения адреса электронной почты и сброса пароля." email: "Электронная почта" @@ -687,6 +686,7 @@ textColor: "Текст" saveAs: "Сохранить под названием…" advanced: "Для продвинутых" value: "Значения" +createdAt: "Создано" updatedAt: "Обновлено" saveConfirm: "Сохранить изменения?" deleteConfirm: "Удалить?" @@ -704,14 +704,54 @@ editCode: "Редактировать исходный текст" apply: "Применить" receiveAnnouncementFromInstance: "Получать оповещения с инстанса" emailNotification: "Уведомления по электронной почте" +publish: "Опубликовать" inChannelSearch: "Поиск по каналу" useReactionPickerForContextMenu: "Открывать палитру реакций правой кнопкой" typingUsers: "Стук клавиш. Это {users}…" jumpToSpecifiedDate: "Перейти к заданной дате" showingPastTimeline: "Отображается старая лента" clear: "Очистить" +markAllAsRead: "Отметить всё как прочитанное" goBack: "Выход" +unlikeConfirm: "В самом деле отменить «нравится»?" +fullView: "Полный вид" +quitFullView: "Закрыть полный вид" +addDescription: "Добавить описание" +userPagePinTip: "Можно добавить сюда заметки, выбрав нужную, и включив в её меню пункт «Закрепить в профиле»." +notSpecifiedMentionWarning: "В этой заметке есть упоминание тех, кто не включён в адресаты" info: "Описание" +userInfo: "Сведения о пользователе" +unknown: "Неизвестно" +onlineStatus: "Присутствие в сети" +hideOnlineStatus: "Скрыть присутствие" +hideOnlineStatusDescription: "Сокрытие присутствия делает некоторые функции, такие как поиск, менее удобными." +online: "В сети" +active: "Действует" +offline: "Не в сети" +notRecommended: "Не рекомендуется" +botProtection: "Ботозащита" +instanceBlocking: "Блокировка инстансов" +selectAccount: "Выберите учётную запись" +enabled: "Вкл." +disabled: "Откл." +quickAction: "Быстрое действие" +user: "Пользователи" +administration: "Управление" +accounts: "Учётные записи" +switch: "Переключение" +noMaintainerInformationWarning: "Не заполнены сведения об администраторах" +noBotProtectionWarning: "Ботозащита не настроена" +configure: "Настроить" +postToGallery: "Опубликовать в галерею" +gallery: "Галерея" +recentPosts: "Недавние публикации" +popularPosts: "Популярные публикации" +shareWithNote: "Поделиться заметкой" +_gallery: + my: "Личная" + liked: "Понравившееся" + like: "Нравится!" + unlike: "Отменить «нравится»" _email: _follow: title: "Новый подписчик" diff --git a/locales/uk-UA.yml b/locales/uk-UA.yml index 2eac306cd5..c3967d74cb 100644 --- a/locales/uk-UA.yml +++ b/locales/uk-UA.yml @@ -138,7 +138,6 @@ flagAsBotDescription: "Ввімкніть якщо цей обліковий з flagAsCat: "Акаунт кота" flagAsCatDescription: "Ввімкніть, щоб позначити, що обліковий запис є котиком." autoAcceptFollowed: "Автоматично приймати запити на підписку від користувачів, на яких ви підписані" -addAcount: "Додати акаунт" loginFailed: "Не вдалося увійти" showOnRemote: "Переглянути в оригіналі" general: "Загальне" @@ -347,7 +346,6 @@ antennaExcludeKeywords: "Винятки" antennaKeywordsDescription: "Розділення ключових слів пробілами для \"І\" або з нової лінійки для \"АБО\"" notifyAntenna: "Сповіщати про нові нотатки" withFileAntenna: "Тільки нотатки з вкладеними файлами" -serviceworker: "ServiceWorker" enableServiceworker: "Ввімкнути ServiceWorker" antennaUsersDescription: "Список імя користувачів в стопчик" caseSensitive: "З урахуванням регістру" @@ -450,7 +448,6 @@ category: "Категорія" tags: "Теги" docSource: "Джерело цього документа" createAccount: "Створити акаунт" -existingAcount: "Існуючий акаунт" regenerate: "Оновити" fontSize: "Розмір шрифту" noFollowRequests: "Немає запитів на підписку" @@ -564,7 +561,6 @@ pluginTokenRequestedDescription: "Цей плагін зможе викорис notificationType: "Тип сповіщення" edit: "Редагувати" useStarForReactionFallback: "Використовувати ★ як запасний варіант, якщо емодзі реакції невідомий" -emailConfig: "Налаштування email сервера" enableEmail: "Увімкнути функцію доставки пошти" emailConfigInfo: "Використовується для підтвердження електронної пошти підчас реєстрації, а також для відновлення паролю." email: "E-mail" @@ -691,6 +687,10 @@ registry: "Реєстр" closeAccount: "Закрити обліковий запис" goBack: "Назад" info: "Інформація" +user: "Користувачі" +administration: "Управління" +_gallery: + unlike: "Не вподобати" _email: _follow: title: "Новий підписник" diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index 04206c0a34..b53be8d113 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -138,7 +138,7 @@ flagAsBotDescription: "如果此帐户由程序控制,请启用此项。启用 flagAsCat: "这个账户是Cat" flagAsCatDescription: "如果您想表明此帐户是一只猫,请打开此标志。" autoAcceptFollowed: "自动允许关注" -addAcount: "添加账户" +addAccount: "添加账户" loginFailed: "登录失败" showOnRemote: "转到所在实例显示" general: "常规设置" @@ -349,7 +349,6 @@ antennaExcludeKeywords: "排除关键字" antennaKeywordsDescription: "使用空格分隔会产生AND规范,并且使用换行符分隔会产生OR规范" notifyAntenna: "通知新帖子" withFileAntenna: "仅带有附件的帖子" -serviceworker: "ServiceWorker" enableServiceworker: "启用ServiceWorker" antennaUsersDescription: "指定用户名,用换行符分隔" caseSensitive: "区分大小写" @@ -453,7 +452,7 @@ category: "类别" tags: "标签" docSource: "文件来源" createAccount: "注册账户" -existingAcount: "现有的帐户" +existingAccount: "现有的帐户" regenerate: "重新生成" fontSize: "字体大小" noFollowRequests: "没有关注申请" @@ -568,7 +567,7 @@ pluginTokenRequestedDescription: "此插件将能够拥有此处设置的权限" notificationType: "通知类型" edit: "编辑" useStarForReactionFallback: "如果回应的是未知表情符号,则使用★作为代替" -emailConfig: "邮件服务器设置" +emailServer: "邮件服务器" enableEmail: "启用发送邮件功能" emailConfigInfo: "用于确认电子邮件和密码重置" email: "邮箱" @@ -705,6 +704,7 @@ editCode: "编辑代码" apply: "应用" receiveAnnouncementFromInstance: "从实例接收通知" emailNotification: "邮件通知" +publish: "发布" inChannelSearch: "频道内搜索" useReactionPickerForContextMenu: "单击右键打开回应工具栏" typingUsers: "{users}正在输入" @@ -728,6 +728,30 @@ hideOnlineStatusDescription: "隐藏在线状态后,可能会降低例如搜 online: "在线" active: "活动" offline: "离线" +notRecommended: "不推荐" +botProtection: "Bot防御" +instanceBlocking: "被阻拦的实例" +selectAccount: "选择账户" +enabled: "已启用" +disabled: "已禁用 " +quickAction: "快捷操作" +user: "用户" +administration: "管理" +accounts: "账户" +switch: "切换" +noMaintainerInformationWarning: "管理人员信息未设置。" +noBotProtectionWarning: "Bot保护未设置。" +configure: "设置" +postToGallery: "发送到图库" +gallery: "图库" +recentPosts: "最新发布" +popularPosts: "热门投稿" +shareWithNote: "在帖子中分享" +_gallery: + my: "我的图库" + liked: "喜欢的图片" + like: "喜欢❤" + unlike: "取消赞" _email: _follow: title: "你有新的关注者" diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml index 7752f6613f..62b48829b9 100644 --- a/locales/zh-TW.yml +++ b/locales/zh-TW.yml @@ -56,7 +56,7 @@ receiveFollowRequest: "您有新的追隨請求" followRequestAccepted: "追隨請求已接受" mention: "提及" mentions: "提及" -directNotes: "指定使用者發佈" +directNotes: "私訊" importAndExport: "匯入與匯出" import: "匯入" export: "匯出" @@ -94,7 +94,7 @@ renote: "轉發" unrenote: "取消轉發" renoted: "轉發成功" cantRenote: "無法轉發此貼文。" -cantReRenote: "無法轉發之前已經轉發過的內容" +cantReRenote: "無法轉發之前已經轉發過的內容。" quote: "引用" pinnedNote: "已置頂的貼文" pinned: "置頂" @@ -138,7 +138,7 @@ flagAsBotDescription: "如果本帳戶是由程式控制,請啟用此選項。 flagAsCat: "此使用者是貓" flagAsCatDescription: "如果想將本帳戶標示為一隻貓,請開啟此標示" autoAcceptFollowed: "自動追隨中使用者的追隨請求" -addAcount: "新增帳戶" +addAccount: "添加帳戶" loginFailed: "登入失敗" showOnRemote: "轉到所在實例顯示" general: "一般" @@ -149,7 +149,7 @@ searchWith: "搜尋: {q}" youHaveNoLists: "你沒有任何清單" followConfirm: "你真的要追隨{name}嗎?" proxyAccount: "代理帳號" -proxyAccountDescription: "代理帳號是在某些情況下充當其他伺服器用戶的帳號。例如,當用戶將一個來自其他伺服器的帳號放在列表中時,由於沒有其他用戶關注該帳號,該指令不會傳送到該伺服器上,因此會由代理帳戶關注。" +proxyAccountDescription: "代理帳號是在某些情況下充當其他伺服器用戶的帳號。例如,當使用者將一個來自其他伺服器的帳號放在列表中時,由於沒有其他使用者關注該帳號,該指令不會傳送到該伺服器上,因此會由代理帳戶關注。" host: "主機" selectUser: "選取使用者" recipient: "收件人" @@ -180,7 +180,7 @@ instanceInfo: "實例資訊" statistics: "統計" clearQueue: "清除佇列" clearQueueConfirmTitle: "確定要清除佇列嗎?" -clearQueueConfirmText: "未發佈的帖子將不會發佈。您通常不需要確認。" +clearQueueConfirmText: "未發佈的貼文將不會發佈。您通常不需要確認。" clearCachedFiles: "清除快取資料" clearCachedFilesConfirm: "確定要清除所有遠端暫存資料嗎?" blockedInstances: "已封鎖的實例" @@ -192,12 +192,12 @@ noUsers: "沒有任何使用者" editProfile: "編輯個人檔案" noteDeleteConfirm: "確定刪除此貼文嗎?" pinLimitExceeded: "不能置頂更多貼文了" -intro: "Misskey 部署完成!請開設管理員帳號!" +intro: "Misskey 部署完成!請建立管理員帳號!" done: "完成" processing: "處理中" preview: "預覽" default: "預設" -noCustomEmojis: "沒有表情符號" +noCustomEmojis: "沒有自訂的表情符號" noJobs: "沒有任務" federating: "整合搜索中" blocked: "已封鎖" @@ -231,7 +231,7 @@ resetAreYouSure: "確定要重設嗎?" saved: "已儲存" messaging: "傳送訊息" upload: "上傳" -fromDrive: "從雲端" +fromDrive: "從雲端空間" fromUrl: "從URL" uploadFromUrl: "從網址上傳" uploadFromUrlDescription: "您要上傳的文件的URL" @@ -247,7 +247,7 @@ agreeTo: "我同意{0}" tos: "使用條款" start: "開始" home: "首頁" -remoteUserCaution: "由於該用戶來自遠端實例,因此資料用戶並未即時更新。" +remoteUserCaution: "由於該使用者來自遠端實例,因此資訊可能非即時的。" activity: "動態" images: "圖片" birthday: "生日" @@ -286,11 +286,11 @@ rename: "重新命名" avatar: "大頭貼" banner: "橫幅" nsfw: "敏感內容" -whenServerDisconnected: "與服務器的連接中斷時" +whenServerDisconnected: "與伺服器的連接中斷時" disconnectedFromServer: "與伺服器中斷連線" -reload: "重新載入" +reload: "重新整理" doNothing: "無視" -reloadConfirm: "確定要重新嘗試嗎?" +reloadConfirm: "確定要重新整理嗎?" watch: "關注" unwatch: "取消追隨" accept: "接受" @@ -315,18 +315,18 @@ enableLocalTimeline: "開啟本地時間軸" enableGlobalTimeline: "啟用公開時間軸" disablingTimelinesInfo: "即使您關閉了時間線功能,管理員和協調人仍可以繼續使用,以方便您。" registration: "註冊" -enableRegistration: "開啟新用戶註冊" +enableRegistration: "開啟新使用者註冊" invite: "邀請" proxyRemoteFiles: "遠端代理檔案" -proxyRemoteFilesDescription: "啟用此設置後,由於超出存儲容量而未保存或刪除的遠程文件將被本地代理,並且將生成預覽圖。這不影響服務器的存儲。" -driveCapacityPerLocalAccount: "每個本地用戶的雲端容量" +proxyRemoteFilesDescription: "啟用此設置後,由於超出存儲容量而未保存或刪除的遠程文件將被本地代理,並且將生成預覽圖。這不影響伺服器的存儲。" +driveCapacityPerLocalAccount: "每個本地用戶的雲端空間大小" driveCapacityPerRemoteAccount: "每個非本地用戶的雲端容量" inMb: "以Mbps為單位" iconUrl: "圖像URL" -bannerUrl: "橫幅圖片URL" +bannerUrl: "橫幅圖像URL" basicInfo: "基本資訊" pinnedUsers: "置頂用戶" -pinnedUsersDescription: "在「發現」頁面中使用換行標記想要置頂的用戶。" +pinnedUsersDescription: "在「發現」頁面中使用換行標記想要置頂的使用者。" pinnedPages: "釘選頁面" pinnedPagesDescription: "輸入要固定至實例首頁的頁面路徑,以換行符分隔。" pinnedClipId: "置頂的摘錄ID" @@ -339,7 +339,7 @@ recaptcha: "reCAPTCHA" enableRecaptcha: "啟用 reCAPTCHA" recaptchaSiteKey: "網站金鑰" recaptchaSecretKey: "金鑰" -avoidMultiCaptchaConfirm: "使用多種驗證方式可能會造成干擾,您要禁用其他驗證方式嗎?您可以按“取消”保留多種驗證方式。" +avoidMultiCaptchaConfirm: "使用多種驗證方式可能會造成干擾,您要關閉其他驗證方式嗎?您可以按“取消”保留多種驗證方式。" antennas: "天線" manageAntennas: "管理天線" name: "名稱" @@ -349,7 +349,6 @@ antennaExcludeKeywords: "排除關鍵字" antennaKeywordsDescription: "用空格分隔指定AND、用換行符分隔指定OR" notifyAntenna: "通知有新貼文" withFileAntenna: "僅帶有附件的貼文" -serviceworker: "ServiceWorker" enableServiceworker: "開啟 ServiceWorker" antennaUsersDescription: "指定用換行符分隔的用戶名" caseSensitive: "區分大小寫" @@ -361,11 +360,11 @@ silence: "禁言" silenceConfirm: "確定要禁言此用戶嗎?" unsilence: "解除禁言" unsilenceConfirm: "確定要解除禁言嗎?" -popularUsers: "熱門用戶" -recentlyUpdatedUsers: "最近發文的用戶" -recentlyRegisteredUsers: "新加入用戶" -recentlyDiscoveredUsers: "最近發現的用戶" -exploreUsersCount: "有{count}個用戶" +popularUsers: "熱門使用者" +recentlyUpdatedUsers: "最近發文的使用者" +recentlyRegisteredUsers: "新加入使用者" +recentlyDiscoveredUsers: "最近發現的使用者" +exploreUsersCount: "有{count}個使用者" exploreFediverse: "探索聯邦世界" popularTags: "熱門標籤" userList: "清單" @@ -405,7 +404,7 @@ invites: "邀請" groupName: "群組名稱" members: "成員" transfer: "轉讓" -messagingWithUser: "傳送訊息給其他用戶" +messagingWithUser: "傳送訊息給其他使用者" messagingWithGroup: "發送訊息至群組" title: "標題" text: "文字" @@ -431,11 +430,11 @@ tooShort: "過短" tooLong: "過長" weakPassword: "密碼強度過弱" normalPassword: "密碼強度普通" -strongPassword: "密碼強度堅強" +strongPassword: "密碼強度高" passwordMatched: "密碼一致" passwordNotMatched: "密碼不一致" signinWith: "以{x}登錄" -signinFailed: "登入失敗。 請檢查用戶名和密碼。" +signinFailed: "登入失敗。 請檢查使用者名稱和密碼。" tapSecurityKey: "點擊安全密鑰" or: "或者" language: "語言" @@ -453,7 +452,7 @@ category: "類別" tags: "標籤" docSource: "文件來源" createAccount: "建立帳戶" -existingAcount: "現有帳戶" +existingAccount: "現有帳戶" regenerate: "再生" fontSize: "字體大小" noFollowRequests: "沒有要求跟隨您的申請" @@ -477,8 +476,8 @@ useObjectStorage: "使用Object Storage" objectStorageBaseUrl: "Base URL" objectStorageBucket: "儲存空間(Bucket)" objectStoragePrefix: "前綴" -objectStorageEndpoint: "訪問網域名稱(Endpoint)" -objectStorageEndpointDesc: "如要使用AWS S3,請留空。否則請根據伺服器要求以''或 ':'的形式設定訪問網域名稱(Endpoint)。" +objectStorageEndpoint: "端點(Endpoint)" +objectStorageEndpointDesc: "如要使用AWS S3,請留空。否則請依照你使用的服務商的說明書進行設定,以''或 ':'的形式設定端點(Endpoint)。" objectStorageRegion: "地域(Region)" objectStorageUseSSL: "使用SSL" objectStorageUseProxy: "使用網路代理" @@ -512,12 +511,12 @@ scratchpad: "暫存記憶體" output: "輸出" script: "腳本" disablePagesScript: "停用頁面的AiScript腳本" -updateRemoteUser: "更新遠端用戶資料" +updateRemoteUser: "更新遠端使用者資訊" deleteAllFiles: "刪除所有檔案" deleteAllFilesConfirm: "要删除所有檔案嗎?" removeAllFollowing: "解除所有追蹤" removeAllFollowingDescription: "解除{host}所有的追蹤。在實例不再存在時執行。" -userSuspended: "該用戶已被凍結" +userSuspended: "該使用者已被停用" userSilenced: "該用戶已被禁言。" sidebar: "側邊列" divider: "分割線" @@ -559,7 +558,7 @@ tokenRequested: "允許存取帳號" notificationType: "通知形式" edit: "編輯" useStarForReactionFallback: "以★代替未知的表情符號" -emailConfig: "電子郵件伺服器設定" +emailServer: "電郵伺服器" enableEmail: "啟用發送電郵功能" emailConfigInfo: "用於確認電郵地址及密碼重置" email: "電子郵件" @@ -586,9 +585,11 @@ create: "新增" notificationSetting: "通知設定" notificationSettingDesc: "選擇顯示通知的類型" useGlobalSetting: "使用全域設定" +useGlobalSettingDesc: "啟用時,將使用帳戶通知設定。停用時,則可以單獨設定。" other: "其他" regenerateLoginToken: "重新產生登入權杖" regenerateLoginTokenDescription: "重新產生用於登入的內部權杖。一般情況下是不需要這樣做的。一旦重產,所有裝置將會被登出。" +setMultipleBySeparatingWithSpace: "您可以使用空格分隔多個項目。" fileIdOrUrl: "檔案ID或URL" chatOpenBehavior: "開啟聊天窗口時的行為" behavior: "行為" @@ -602,6 +603,7 @@ send: "發送" abuseMarkAsResolved: "處理完畢" openInNewTab: "在新分頁中開啟" openInSideView: "在側欄中開啟" +defaultNavigationBehaviour: "默認導航" editTheseSettingsMayBreakAccount: "修改這些設定可能會毀損您的帳戶" instanceTicker: "貼文的實例來源" waitingFor: "等待{x}" @@ -635,13 +637,16 @@ driveUsage: "雲端硬碟使用量" noCrawle: "拒絕搜尋引擎索引" noCrawleDescription: "要求網路搜尋引擎不要索引你的個人資料頁、貼文及頁面等。" lockedAccountInfo: "即使你通過了追隨者請求,除非你將貼文的可見性設定為 「追隨者」,否則任何人都能看見你的貼文。" +alwaysMarkSensitive: "默認將圖像/影像標記為敏感內容" loadRawImages: "以原始圖檔顯示附件圖檔的縮圖" disableShowingAnimatedImages: "不播放動態圖檔" +verificationEmailSent: "已發送驗證電子郵件。請點擊進入電子郵件中的鏈接完成驗證。" notSet: "未設定" emailVerified: "已成功驗證您的電郵" noteFavoritesCount: "我的最愛貼文的數目" pageLikesCount: "頁面被按讚次數" pageLikedCount: "頁面被按讚次數" +reversiCount: "黑白棋對戰次數" contact: "聯絡人" useSystemFont: "使用系統預設的字型" clips: "摘錄" @@ -670,6 +675,7 @@ textColor: "文字" saveAs: "另存為..." advanced: "進階" value: "數值" +createdAt: "建立於" updatedAt: "最後更新" saveConfirm: "您要儲存變更嗎?" deleteConfirm: "你確定要刪除嗎?" @@ -685,17 +691,55 @@ capacity: "容量" inUse: "已使用" editCode: "編輯代碼" apply: "套用" +receiveAnnouncementFromInstance: "接收由本實例發出的電郵通知" emailNotification: "郵件通知" inChannelSearch: "頻道内搜尋" +useReactionPickerForContextMenu: "點擊右鍵開啟回應工具欄" typingUsers: "{users}輸入中..." jumpToSpecifiedDate: "跳轉到特定日期" +showingPastTimeline: "顯示過往的時間線" clear: "清除" +markAllAsRead: "全部標示為已讀" goBack: "返回" +unlikeConfirm: "要取消按讚嗎?" +fullView: "全熒幕顯示" +quitFullView: "退出全熒幕顯示" +addDescription: "添加描述" +userPagePinTip: "在貼文的選單中選擇\"置頂\",即可置頂該貼文至您的個人檔案頁面。" +notSpecifiedMentionWarning: "此貼文有未指定的提及" info: "資訊" +userInfo: "用戶資料" +unknown: "未知" +onlineStatus: "在線狀態" +hideOnlineStatus: "隱藏在線狀態" +hideOnlineStatusDescription: "隱藏在線狀態後,可能會降低檢索等功能的便利性。" +online: "線上" +active: "最近活躍" +offline: "離線" +notRecommended: "不推薦" +botProtection: "Bot防護" +instanceBlocking: "已封鎖的實例" +selectAccount: "選擇帳戶" +enabled: "已啟用" +disabled: "已停用" +quickAction: "快捷操作" +user: "使用者" +administration: "管理" +accounts: "帳戶" +switch: "切換" +noMaintainerInformationWarning: "尚未設定管理員信息。" +noBotProtectionWarning: "尚未設定Bot防護。" +configure: "設定" +_gallery: + unlike: "收回喜歡" _email: _follow: title: "您有新的追隨者" + _receiveFollowRequest: + title: "收到追隨請求" _plugin: + install: "安裝外掛組件" + installWarn: "請不要安裝來源不明的外掛組件。" manage: "管理插件" _registry: scope: "範圍" @@ -723,7 +767,9 @@ _mfm: mention: "提及" mentionDescription: "透過 @+用戶名 來標示特定使用者。" hashtag: "#tag" + hashtagDescription: "可以使用\"#\"符號後加文字表示話題標籤。" url: "URL" + urlDescription: "可以展示URL位址。" link: "鏈接" bold: "粗體" small: "縮小" @@ -797,8 +843,8 @@ _serverDisconnectedBehavior: _channel: create: "建立頻道" edit: "編輯頻道" - setBanner: "設定橫幅" - removeBanner: "移除封面圖" + setBanner: "設定橫幅圖像" + removeBanner: "移除橫幅圖像" featured: "熱門貼文" owned: "管理中" following: "關注中" @@ -839,6 +885,7 @@ _theme: fg: "文本" panel: "面板" shadow: "陰影" + navActive: "側邊欄文本 (活動)" navIndicator: "側邊欄指示符" link: "鏈接" hashtag: "#tag" @@ -856,11 +903,14 @@ _theme: cwBg: "CW 按鈕背景" cwFg: "CW 按鈕文本" cwHoverBg: "CW 按鈕背景 (漂浮)" + toastBg: "通知背景" + toastFg: "通知文本" buttonBg: "按鈕背景" buttonHoverBg: "按鈕背景 (漂浮)" inputBorder: "輸入框邊框" listItemHoverBg: "列表物品背景 (漂浮)" driveFolderBg: "雲端硬碟文件夾背景" + wallpaperOverlay: "壁紙覆蓋層" badge: "獎章" messageBg: "私訊背景" accentDarken: "強調色(偏暗)" @@ -871,6 +921,7 @@ _sfx: noteMy: "我的貼文" notification: "通知" chat: "傳送訊息" + chatBg: "聊天背景" antenna: "天線接收" channel: "頻道通知" _ago: @@ -908,6 +959,7 @@ _tutorial: step5_4: "如果使用者的名字旁有鎖頭的圖示,代表他們需要手動核准你的追隨請求。" step6_1: "現在你可以在時間軸上看到其他用戶的貼文。" step6_2: "你也可以對別人的貼文作出「情感」,作出簡單的回覆。" + step6_3: "在他人的貼文按下\"+\"圖標,即可選擇喜好的表情符號進行回應。" step7_1: "以上為Misskey的基本操作說明,教學在此告一段落。辛苦了。" step7_2: "歡迎到{help}來瞭解更多Misskey相關介紹。" step7_3: "那麼,祝您在Misskey玩的開心~ 🚀" @@ -925,6 +977,7 @@ _permissions: "write:drive": "編輯雲端硬碟的檔案" "read:favorites": "瀏覽我的最愛" "write:favorites": "編輯我的最愛列表" + "read:following": "查看追隨中的用戶資訊" "write:following": "追隨/解除追隨" "read:messaging": "顯示訊息" "write:messaging": "撰寫或刪除私人訊息" @@ -991,6 +1044,7 @@ _poll: noOnlyOneChoice: "至少需要兩個選項。" choiceN: "選擇{n}" noMore: "沒辦法再添加選項了" + canMultipleVote: "可以多次投票" expiration: "期限" infinite: "無期限" at: "結束時間" @@ -1034,6 +1088,8 @@ _profile: metadataEdit: "編輯進階資訊" metadataLabel: "標籤" metadataContent: "内容" + changeAvatar: "更換大頭貼" + changeBanner: "變更橫幅圖像" _exportOrImport: allNotes: "所有貼文" followingList: "追隨中" diff --git a/migration/1611397665007-gallery.ts b/migration/1611397665007-gallery.ts new file mode 100644 index 0000000000..1b64490feb --- /dev/null +++ b/migration/1611397665007-gallery.ts @@ -0,0 +1,40 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class gallery1611397665007 implements MigrationInterface { + name = 'gallery1611397665007' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`CREATE TABLE "gallery_post" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, "title" character varying(256) NOT NULL, "description" character varying(2048), "userId" character varying(32) NOT NULL, "fileIds" character varying(32) array NOT NULL DEFAULT '{}'::varchar[], "isSensitive" boolean NOT NULL DEFAULT false, "likedCount" integer NOT NULL DEFAULT '0', "tags" character varying(128) array NOT NULL DEFAULT '{}'::varchar[], CONSTRAINT "PK_8e90d7b6015f2c4518881b14753" PRIMARY KEY ("id")); COMMENT ON COLUMN "gallery_post"."createdAt" IS 'The created date of the GalleryPost.'; COMMENT ON COLUMN "gallery_post"."updatedAt" IS 'The updated date of the GalleryPost.'; COMMENT ON COLUMN "gallery_post"."userId" IS 'The ID of author.'; COMMENT ON COLUMN "gallery_post"."isSensitive" IS 'Whether the post is sensitive.'`); + await queryRunner.query(`CREATE INDEX "IDX_8f1a239bd077c8864a20c62c2c" ON "gallery_post" ("createdAt") `); + await queryRunner.query(`CREATE INDEX "IDX_f631d37835adb04792e361807c" ON "gallery_post" ("updatedAt") `); + await queryRunner.query(`CREATE INDEX "IDX_985b836dddd8615e432d7043dd" ON "gallery_post" ("userId") `); + await queryRunner.query(`CREATE INDEX "IDX_3ca50563facd913c425e7a89ee" ON "gallery_post" ("fileIds") `); + await queryRunner.query(`CREATE INDEX "IDX_f2d744d9a14d0dfb8b96cb7fc5" ON "gallery_post" ("isSensitive") `); + await queryRunner.query(`CREATE INDEX "IDX_1a165c68a49d08f11caffbd206" ON "gallery_post" ("likedCount") `); + await queryRunner.query(`CREATE INDEX "IDX_05cca34b985d1b8edc1d1e28df" ON "gallery_post" ("tags") `); + await queryRunner.query(`CREATE TABLE "gallery_like" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "postId" character varying(32) NOT NULL, CONSTRAINT "PK_853ab02be39b8de45cd720cc15f" PRIMARY KEY ("id"))`); + await queryRunner.query(`CREATE INDEX "IDX_8fd5215095473061855ceb948c" ON "gallery_like" ("userId") `); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_df1b5f4099e99fb0bc5eae53b6" ON "gallery_like" ("userId", "postId") `); + await queryRunner.query(`ALTER TABLE "gallery_post" ADD CONSTRAINT "FK_985b836dddd8615e432d7043ddb" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`); + await queryRunner.query(`ALTER TABLE "gallery_like" ADD CONSTRAINT "FK_8fd5215095473061855ceb948cf" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`); + await queryRunner.query(`ALTER TABLE "gallery_like" ADD CONSTRAINT "FK_b1cb568bfe569e47b7051699fc8" FOREIGN KEY ("postId") REFERENCES "gallery_post"("id") ON DELETE CASCADE ON UPDATE NO ACTION`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "gallery_like" DROP CONSTRAINT "FK_b1cb568bfe569e47b7051699fc8"`); + await queryRunner.query(`ALTER TABLE "gallery_like" DROP CONSTRAINT "FK_8fd5215095473061855ceb948cf"`); + await queryRunner.query(`ALTER TABLE "gallery_post" DROP CONSTRAINT "FK_985b836dddd8615e432d7043ddb"`); + await queryRunner.query(`DROP INDEX "IDX_df1b5f4099e99fb0bc5eae53b6"`); + await queryRunner.query(`DROP INDEX "IDX_8fd5215095473061855ceb948c"`); + await queryRunner.query(`DROP TABLE "gallery_like"`); + await queryRunner.query(`DROP INDEX "IDX_05cca34b985d1b8edc1d1e28df"`); + await queryRunner.query(`DROP INDEX "IDX_1a165c68a49d08f11caffbd206"`); + await queryRunner.query(`DROP INDEX "IDX_f2d744d9a14d0dfb8b96cb7fc5"`); + await queryRunner.query(`DROP INDEX "IDX_3ca50563facd913c425e7a89ee"`); + await queryRunner.query(`DROP INDEX "IDX_985b836dddd8615e432d7043dd"`); + await queryRunner.query(`DROP INDEX "IDX_f631d37835adb04792e361807c"`); + await queryRunner.query(`DROP INDEX "IDX_8f1a239bd077c8864a20c62c2c"`); + await queryRunner.query(`DROP TABLE "gallery_post"`); + } + +} diff --git a/package.json b/package.json index 860a1e149e..25ebacaa7c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "misskey", "author": "syuilo ", - "version": "12.78.0", + "version": "12.79.3", "codename": "indigo", "repository": { "type": "git", @@ -47,16 +47,15 @@ "@sinonjs/fake-timers": "7.0.5", "@syuilo/aiscript": "0.11.1", "@types/bcryptjs": "2.4.2", - "@types/bull": "3.15.0", + "@types/bull": "3.15.1", "@types/cbor": "5.0.1", "@types/dateformat": "3.0.1", "@types/escape-regexp": "0.0.0", "@types/glob": "7.1.3", "@types/gulp": "4.0.8", "@types/gulp-rename": "2.0.0", - "@types/gulp-replace": "0.0.31", "@types/is-url": "1.2.28", - "@types/js-yaml": "4.0.0", + "@types/js-yaml": "4.0.1", "@types/jsdom": "16.2.10", "@types/jsonld": "1.5.5", "@types/katex": "0.11.0", @@ -107,31 +106,31 @@ "@typescript-eslint/parser": "4.22.0", "@vue/compiler-sfc": "3.0.11", "abort-controller": "3.0.0", - "apexcharts": "3.26.0", + "apexcharts": "3.26.1", "autobind-decorator": "2.4.0", "autosize": "4.0.2", "autwh": "0.1.0", - "aws-sdk": "2.887.0", + "aws-sdk": "2.892.0", "bcryptjs": "2.4.3", "blurhash": "1.1.3", "broadcast-channel": "3.5.3", - "bull": "3.22.0", + "bull": "3.22.3", "cafy": "15.2.1", "cbor": "7.0.5", - "chalk": "4.1.0", + "chalk": "4.1.1", "chart.js": "2.9.4", "cli-highlight": "2.1.11", "commander": "7.2.0", "concurrently": "6.0.2", "content-disposition": "0.5.3", - "core-js": "3.10.1", + "core-js": "3.11.0", "crc-32": "1.2.0", - "css-loader": "5.2.1", + "css-loader": "5.2.4", "cssnano": "5.0.1", "dateformat": "4.5.1", "diskusage": "1.1.3", "escape-regexp": "0.0.1", - "eslint": "7.24.0", + "eslint": "7.25.0", "eslint-plugin-vue": "7.9.0", "eventemitter3": "4.0.7", "feed": "4.2.2", @@ -142,7 +141,7 @@ "gulp": "4.0.2", "gulp-cssnano": "2.1.3", "gulp-rename": "2.0.0", - "gulp-replace": "1.0.0", + "gulp-replace": "1.1.1", "gulp-terser": "2.0.1", "gulp-tslint": "8.1.4", "hard-source-webpack-plugin": "0.13.1", @@ -160,7 +159,7 @@ "json5-loader": "4.0.1", "jsonld": "4.0.1", "jsrsasign": "8.0.20", - "katex": "0.13.2", + "katex": "0.13.3", "koa": "2.13.1", "koa-bodyparser": "4.3.0", "koa-favicon": "2.1.0", @@ -172,10 +171,10 @@ "koa-views": "7.0.1", "langmap": "0.0.16", "lookup-dns-cache": "2.1.0", - "markdown-it": "12.0.5", + "markdown-it": "12.0.6", "markdown-it-anchor": "7.1.0", "matter-js": "0.17.1", - "mfm-js": "0.16.2", + "mfm-js": "0.16.3", "mocha": "8.3.2", "moji": "0.5.1", "ms": "2.1.3", @@ -188,7 +187,7 @@ "parse5": "6.0.1", "pg": "8.6.0", "portscanner": "2.2.0", - "postcss": "8.2.10", + "postcss": "8.2.12", "postcss-loader": "5.2.0", "prismjs": "1.23.0", "probe-image-size": "7.1.0", @@ -202,7 +201,7 @@ "ratelimiter": "3.4.1", "re2": "1.15.9", "reconnecting-websocket": "4.4.0", - "redis": "3.1.1", + "redis": "3.1.2", "redis-lock": "0.1.4", "reflect-metadata": "0.1.13", "regenerator-runtime": "0.13.7", @@ -212,7 +211,7 @@ "rimraf": "3.0.2", "rndstr": "1.0.0", "s-age": "1.1.2", - "sass": "1.32.8", + "sass": "1.32.11", "sass-loader": "11.0.1", "seedrandom": "3.0.5", "sharp": "0.28.1", @@ -228,9 +227,9 @@ "throttle-debounce": "3.0.1", "tinycolor2": "1.4.2", "tmp": "0.2.1", - "ts-loader": "8.1.0", + "ts-loader": "9.1.1", "ts-node": "9.1.1", - "tsc-alias": "1.2.9", + "tsc-alias": "1.2.10", "tsconfig-paths": "3.9.0", "tslint": "6.1.3", "tslint-sonarts": "1.9.0", @@ -250,15 +249,15 @@ "vue-svg-loader": "0.17.0-beta.2", "vuedraggable": "4.0.1", "web-push": "3.4.4", - "webpack": "5.33.2", + "webpack": "5.35.1", "webpack-cli": "4.6.0", "websocket": "1.0.34", - "ws": "7.4.4", + "ws": "7.4.5", "xev": "2.0.1" }, "devDependencies": { - "@types/chai": "4.2.15", - "@types/fluent-ffmpeg": "2.1.16", + "@types/chai": "4.2.16", + "@types/fluent-ffmpeg": "2.1.17", "chai": "4.3.4", "cross-env": "7.0.3" } diff --git a/src/boot/master.ts b/src/boot/master.ts index ef8692b308..473e215bac 100644 --- a/src/boot/master.ts +++ b/src/boot/master.ts @@ -45,26 +45,15 @@ function greet() { export async function masterMain() { let config!: Config; + // initialize app try { greet(); - - // initialize app - config = await init(); - - if (config.port == null || Number.isNaN(config.port)) { - bootLogger.error('The port is not configured. Please configure port.', null, true); - process.exit(1); - } - - if (process.platform === 'linux' && isWellKnownPort(config.port) && !isRoot()) { - bootLogger.error('You need root privileges to listen on well-known port on Linux', null, true); - process.exit(1); - } - - if (!await isPortAvailable(config.port)) { - bootLogger.error(`Port ${config.port} is already in use`, null, true); - process.exit(1); - } + showEnvironment(); + await showMachineInfo(bootLogger); + showNodejsVersion(); + config = loadConfigBoot(); + await connectDb(); + await validatePort(config); } catch (e) { bootLogger.error('Fatal error occurred during initialization', null, true); process.exit(1); @@ -89,14 +78,6 @@ const runningNodejsVersion = process.version.slice(1).split('.').map(x => parseI const requiredNodejsVersion = [11, 7, 0]; const satisfyNodejsVersion = !lessThan(runningNodejsVersion, requiredNodejsVersion); -function isWellKnownPort(port: number): boolean { - return port < 1024; -} - -async function isPortAvailable(port: number): Promise { - return await portscanner.checkPortStatus(port, '127.0.0.1') === 'closed'; -} - function showEnvironment(): void { const env = process.env.NODE_ENV; const logger = bootLogger.createSubLogger('env'); @@ -110,14 +91,7 @@ function showEnvironment(): void { logger.info(`You ${isRoot() ? '' : 'do not '}have root privileges`); } -/** - * Init app - */ -async function init(): Promise { - showEnvironment(); - - await showMachineInfo(bootLogger); - +function showNodejsVersion(): void { const nodejsLogger = bootLogger.createSubLogger('nodejs'); nodejsLogger.info(`Version ${runningNodejsVersion.join('.')}`); @@ -126,7 +100,9 @@ async function init(): Promise { nodejsLogger.error(`Node.js version is less than ${requiredNodejsVersion.join('.')}. Please upgrade it.`, null, true); process.exit(1); } +} +function loadConfigBoot(): Config { const configLogger = bootLogger.createSubLogger('config'); let config; @@ -146,6 +122,10 @@ async function init(): Promise { configLogger.succ('Loaded'); + return config; +} + +async function connectDb(): Promise { const dbLogger = bootLogger.createSubLogger('db'); // Try to connect to DB @@ -159,8 +139,29 @@ async function init(): Promise { dbLogger.error(e); process.exit(1); } +} - return config; +async function validatePort(config: Config): Promise { + const isWellKnownPort = (port: number) => port < 1024; + + async function isPortAvailable(port: number): Promise { + return await portscanner.checkPortStatus(port, '127.0.0.1') === 'closed'; + } + + if (config.port == null || Number.isNaN(config.port)) { + bootLogger.error('The port is not configured. Please configure port.', null, true); + process.exit(1); + } + + if (process.platform === 'linux' && isWellKnownPort(config.port) && !isRoot()) { + bootLogger.error('You need root privileges to listen on well-known port on Linux', null, true); + process.exit(1); + } + + if (!await isPortAvailable(config.port)) { + bootLogger.error(`Port ${config.port} is already in use`, null, true); + process.exit(1); + } } async function spawnWorkers(limit: number = 1) { diff --git a/src/client/components/captcha.vue b/src/client/components/captcha.vue index 26215df09d..5da8ede3b9 100644 --- a/src/client/components/captcha.vue +++ b/src/client/components/captcha.vue @@ -6,7 +6,7 @@ + + diff --git a/src/client/components/global/url.vue b/src/client/components/global/url.vue index e633a57bd8..218729882d 100644 --- a/src/client/components/global/url.vue +++ b/src/client/components/global/url.vue @@ -113,8 +113,6 @@ export default defineComponent({ > .icon { padding-left: 2px; font-size: .9em; - font-weight: 400; - font-style: normal; } > .self { diff --git a/src/client/components/launch-pad.vue b/src/client/components/launch-pad.vue index e3d24c70f2..58b74bdaee 100644 --- a/src/client/components/launch-pad.vue +++ b/src/client/components/launch-pad.vue @@ -3,12 +3,12 @@
- +
{{ $ts.help }}
- +
{{ $t('aboutX', { x: instanceName }) }}
- - + +
{{ $ts.aboutMisskey }}
@@ -101,6 +101,7 @@ export default defineComponent({ flex-direction: column; align-items: center; justify-content: center; + vertical-align: bottom; width: 128px; height: 128px; border-radius: var(--radius); @@ -117,6 +118,7 @@ export default defineComponent({ > .icon { font-size: 26px; + height: 32px; } > .text { diff --git a/src/client/components/post-form-attaches.vue b/src/client/components/post-form-attaches.vue index eba7e7af36..f832ea87b5 100644 --- a/src/client/components/post-form-attaches.vue +++ b/src/client/components/post-form-attaches.vue @@ -93,7 +93,7 @@ export default defineComponent({ if (this.menu) return; this.menu = os.modalMenu([{ text: this.$ts.renameFile, - icon: faICursor, + icon: 'fas fa-i-cursor', action: () => { this.rename(file) } }, { text: file.isSensitive ? this.$ts.unmarkAsSensitive : this.$ts.markAsSensitive, diff --git a/src/client/components/tab.vue b/src/client/components/tab.vue index 96cbe50fb1..5e54fc968e 100644 --- a/src/client/components/tab.vue +++ b/src/client/components/tab.vue @@ -12,14 +12,16 @@ export default defineComponent({ return withDirectives(h('div', { class: 'pxhvhrfw', - }, options.map(option => h('button', { + }, options.map(option => withDirectives(h('button', { class: ['_button', { active: this.value === option.props.value }], key: option.props.value, disabled: this.value === option.props.value, onClick: () => { this.$emit('update:value', option.props.value); } - }, option.children))), [ + }, option.children), [ + [resolveDirective('click-anime')] + ]))), [ [resolveDirective('size'), { max: [500] }] ]); } diff --git a/src/client/components/ui/button.vue b/src/client/components/ui/button.vue index 3901e8ae44..c92f30db97 100644 --- a/src/client/components/ui/button.vue +++ b/src/client/components/ui/button.vue @@ -139,7 +139,8 @@ export default defineComponent({ } &.primary { - color: #fff; + font-weight: bold; + color: #fff !important; background: var(--accent); &:not(:disabled):hover { @@ -200,10 +201,6 @@ export default defineComponent({ min-width: 100px; } - &.primary { - font-weight: bold; - } - > .ripples { position: absolute; z-index: 0; diff --git a/src/client/components/ui/container.vue b/src/client/components/ui/container.vue index cfd928518e..2e8eea7132 100644 --- a/src/client/components/ui/container.vue +++ b/src/client/components/ui/container.vue @@ -199,6 +199,7 @@ export default defineComponent({ > .fade { display: block; position: absolute; + z-index: 10; bottom: 0; left: 0; width: 100%; diff --git a/src/client/components/ui/pagination.vue b/src/client/components/ui/pagination.vue index ac8ed01e12..1bd77447b7 100644 --- a/src/client/components/ui/pagination.vue +++ b/src/client/components/ui/pagination.vue @@ -10,8 +10,8 @@
-
- +
+ @@ -38,6 +38,12 @@ export default defineComponent({ pagination: { required: true }, + + disableAutoLoad: { + type: Boolean, + required: false, + default: false, + } }, }); diff --git a/src/client/components/user-select-dialog.vue b/src/client/components/user-select-dialog.vue index 620c8eee28..74081753b7 100644 --- a/src/client/components/user-select-dialog.vue +++ b/src/client/components/user-select-dialog.vue @@ -8,33 +8,35 @@ @closed="$emit('closed')" > -
-
- {{ $ts.username }} - {{ $ts.host }} -
-
-
-
-
- -
- - -
+
+
+
+ {{ $ts.username }} + {{ $ts.host }}
-
- {{ $ts.noUsers }} +
+
+
+ +
+ + +
+
+
+
+ {{ $ts.noUsers }} +
-
-
-
-
- -
- - +
+
+
+ +
+ + +
@@ -122,76 +124,78 @@ export default defineComponent({ diff --git a/src/client/directives/click-anime.ts b/src/client/directives/click-anime.ts index 864155f076..9fd583d6dd 100644 --- a/src/client/directives/click-anime.ts +++ b/src/client/directives/click-anime.ts @@ -2,7 +2,10 @@ import { Directive } from 'vue'; export default { mounted(el, binding, vn) { + el.classList.add('_anime_bounce_standBy'); + el.addEventListener('mousedown', () => { + el.classList.add('_anime_bounce_standBy'); el.classList.add('_anime_bounce_ready'); el.addEventListener('mouseleave', () => { @@ -17,6 +20,7 @@ export default { el.addEventListener('animationend', () => { el.classList.remove('_anime_bounce_ready'); el.classList.remove('_anime_bounce'); + el.classList.add('_anime_bounce_standBy'); }); } } as Directive; diff --git a/src/client/pages/about.vue b/src/client/pages/about.vue index 4f70998eee..bdd4c78827 100644 --- a/src/client/pages/about.vue +++ b/src/client/pages/about.vue @@ -1,39 +1,57 @@ @@ -45,9 +63,12 @@ import FormLink from '@client/components/form/link.vue'; import FormBase from '@client/components/form/base.vue'; import FormGroup from '@client/components/form/group.vue'; import FormKeyValueView from '@client/components/form/key-value-view.vue'; +import FormTextarea from '@client/components/form/textarea.vue'; +import FormSuspense from '@client/components/form/suspense.vue'; import * as os from '@client/os'; import number from '@client/filters/number'; import * as symbols from '@client/symbols'; +import { host } from '@client/config'; export default defineComponent({ components: { @@ -55,6 +76,8 @@ export default defineComponent({ FormGroup, FormLink, FormKeyValueView, + FormTextarea, + FormSuspense, }, data() { @@ -63,24 +86,17 @@ export default defineComponent({ title: this.$ts.instanceInfo, icon: 'fas fa-info-circle' }, + host, version, instanceName, stats: null, + initStats: () => os.api('stats', { + }).then((stats) => { + this.stats = stats; + }) } }, - computed: { - meta() { - return this.$instance; - }, - }, - - created() { - os.api('stats').then(stats => { - this.stats = stats; - }); - }, - methods: { number } @@ -88,18 +104,20 @@ export default defineComponent({ diff --git a/src/client/pages/gallery/edit.vue b/src/client/pages/gallery/edit.vue new file mode 100644 index 0000000000..cd6a0defdd --- /dev/null +++ b/src/client/pages/gallery/edit.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/client/pages/gallery/index.vue b/src/client/pages/gallery/index.vue new file mode 100644 index 0000000000..9e726e70f2 --- /dev/null +++ b/src/client/pages/gallery/index.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/src/client/pages/gallery/post.vue b/src/client/pages/gallery/post.vue new file mode 100644 index 0000000000..703506a78d --- /dev/null +++ b/src/client/pages/gallery/post.vue @@ -0,0 +1,281 @@ + + + + + diff --git a/src/client/pages/instance-info.vue b/src/client/pages/instance-info.vue index 662b82ddb1..c66ad50f6d 100644 --- a/src/client/pages/instance-info.vue +++ b/src/client/pages/instance-info.vue @@ -147,7 +147,6 @@ import * as os from '@client/os'; import number from '@client/filters/number'; import bytes from '@client/filters/bytes'; import * as symbols from '@client/symbols'; -import { url } from '@client/config'; const chartLimit = 90; const sum = (...arr) => arr.reduce((r, a) => r.map((b, i) => a[i] + b)); @@ -449,7 +448,7 @@ export default defineComponent({ .fnfelxur { padding: 16px; - > img { + > .icon { display: block; margin: auto; height: 64px; diff --git a/src/client/pages/mentions.vue b/src/client/pages/mentions.vue index a12993ebb8..798d3e342d 100644 --- a/src/client/pages/mentions.vue +++ b/src/client/pages/mentions.vue @@ -25,7 +25,6 @@ export default defineComponent({ endpoint: 'notes/mentions', limit: 10, }, - faAt }; }, diff --git a/src/client/pages/page.vue b/src/client/pages/page.vue index f25ed51184..6ee3ee8d26 100644 --- a/src/client/pages/page.vue +++ b/src/client/pages/page.vue @@ -1,35 +1,60 @@ @@ -39,11 +64,20 @@ import XPage from '@client/components/page/page.vue'; import MkButton from '@client/components/ui/button.vue'; import * as os from '@client/os'; import * as symbols from '@client/symbols'; +import { url } from '@client/config'; +import MkFollowButton from '@client/components/follow-button.vue'; +import MkContainer from '@client/components/ui/container.vue'; +import MkPagination from '@client/components/ui/pagination.vue'; +import MkPagePreview from '@client/components/page-preview.vue'; export default defineComponent({ components: { XPage, MkButton, + MkFollowButton, + MkContainer, + MkPagination, + MkPagePreview, }, props: { @@ -69,6 +103,14 @@ export default defineComponent({ }, } : null), page: null, + error: null, + otherPostsPagination: { + endpoint: 'users/pages', + limit: 6, + params: () => ({ + userId: this.page.user.id + }) + }, }; }, @@ -90,11 +132,28 @@ export default defineComponent({ methods: { fetch() { + this.page = null; os.api('pages/show', { name: this.pageName, username: this.username, }).then(page => { this.page = page; + }).catch(e => { + this.error = e; + }); + }, + + share() { + navigator.share({ + title: this.page.title || this.page.name, + text: this.page.summary, + url: `${url}/@${this.page.user.username}/pages/${this.page.name}` + }); + }, + + shareWithNote() { + os.post({ + initialText: `${this.page.title || this.page.name} ${url}/@${this.page.user.username}/pages/${this.page.name}` }); }, @@ -132,6 +191,15 @@ export default defineComponent({ diff --git a/src/client/pages/user/index.vue b/src/client/pages/user/index.vue index 207b44f631..717ca5d8fe 100644 --- a/src/client/pages/user/index.vue +++ b/src/client/pages/user/index.vue @@ -161,15 +161,15 @@
- + {{ number(user.notesCount) }} {{ $ts.notes }} - + {{ number(user.followingCount) }} {{ $ts.following }} - + {{ number(user.followersCount) }} {{ $ts.followers }} @@ -179,18 +179,22 @@