diff --git a/.node-version b/.node-version index ebea32b6fb..9a0c3d3f45 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -v14.15.1 +v14.15.4 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2ffe6dc2e1..d9d6702e80 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -240,36 +240,6 @@ SQLでは配列のインデックスは**1始まり**。 MongoDBの時とは違い、findOneでレコードを取得する時に対象レコードが存在しない場合 **`undefined`** が返ってくるので注意。 MongoDBは`null`で返してきてたので、その感覚で`if (x === null)`とか書くとバグる。代わりに`if (x == null)`と書いてください -### 簡素な`undefined`チェック -データベースからレコードを取得するときに、プログラムの流れ的に(ほぼ)絶対`undefined`にはならない場合でも、`undefined`チェックしないとTypeScriptに怒られます。 -でもいちいち複数行を費やして、発生するはずのない`undefined`をチェックするのも面倒なので、`ensure`というユーティリティ関数を用意しています。 -例えば、 -``` ts -const user = await Users.findOne(userId); -// この時点で user の型は User | undefined -if (user == null) { - throw 'missing user'; -} -// この時点で user の型は User -``` -という処理を`ensure`を使うと -``` ts -const user = await Users.findOne(userId).then(ensure); -// この時点で user の型は User -``` -という風に書けます。 -もちろん`ensure`内部でエラーを握りつぶすようなことはしておらず、万が一`undefined`だった場合はPromiseがRejectされ後続の処理は実行されません。 -``` ts -const user = await Users.findOne(userId).then(ensure); -// 万が一 Users.findOne の結果が undefined だったら、ensure でエラーが発生するので -// この行に到達することは無い -// なので、.then(ensure) は -// if (user == null) { -// throw 'missing user'; -// } -// の糖衣構文のような扱いです -``` - ### Migration作成方法 ``` npx ts-node ./node_modules/typeorm/cli.js migration:generate -n 変更の名前 diff --git a/Dockerfile b/Dockerfile index ee60e97fc6..eba3a833bc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:14.15.1-alpine AS base +FROM node:14.15.4-alpine AS base ENV NODE_ENV=production diff --git a/assets/mi-white.png b/assets/mi-white.png new file mode 100644 index 0000000000..1e57da6b38 Binary files /dev/null and b/assets/mi-white.png differ diff --git a/locales/ar-SA.yml b/locales/ar-SA.yml index 0c96bcf2c0..1b400f65f9 100644 --- a/locales/ar-SA.yml +++ b/locales/ar-SA.yml @@ -88,6 +88,7 @@ enterEmoji: "أدخل إيموجي" unrenote: "إلغاء مشاركة الملاحظة" quote: "اقتبس" pinnedNote: "ملاحظة مدبسة" +pinned: "دبّسها على الصفحة الشخصية" you: "أنت" clickToShow: "اضغط للعرض" sensitive: "محتوى حساس" @@ -428,6 +429,9 @@ latestVersion: "آخر نسخة مستقرة" usageAmount: "الإستخدام" capacity: "السعة" inUse: "مستخدم" +_email: + _follow: + title: "يتابعك" _mfm: mention: "أشر الى" quote: "اقتبس" diff --git a/locales/de-DE.yml b/locales/de-DE.yml index 682e03d434..cf9296981f 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -97,6 +97,7 @@ cantRenote: "Renote dieses Beitrags nicht möglich." cantReRenote: "Renote einer Renote nicht möglich." quote: "Zitieren" pinnedNote: "Angepinnte Notiz" +pinned: "Anheften" you: "Du" clickToShow: "Klicke, um diesen Inhalt anzusehen" sensitive: "NSFW" @@ -437,6 +438,7 @@ signinWith: "Mit {x} anmelden" signinFailed: "Anmeldung fehlgeschlagen. Überprüfe Benutzername und Passswort." tapSecurityKey: "Tippe deinen Sicherheitsschlüssel an" or: "Oder" +language: "Sprache" uiLanguage: "Sprache der Benutzeroberfläche" groupInvited: "Du wurdest in eine Gruppe eingeladen" aboutX: "Über {x}" @@ -700,7 +702,13 @@ capacity: "Kapazität" inUse: "Verwendet" editCode: "Code bearbeiten" apply: "Anwenden" -receiveAnnouncementFromInstance: "Benachrichtigungen von der Instanz empfangen" +receiveAnnouncementFromInstance: "E-Mail-Benachrichtigungen von dieser Instanz empfangen" +emailNotification: "E-Mail-Benachrichtigungen" +_email: + _follow: + title: "Du hast einen neuen Follower" + _receiveFollowRequest: + title: "Du hast eine Follow-Anfrage erhalten" _plugin: install: "Plugins installieren" installWarn: "Installiere bitte nur vertrauenswürdige Plugins." @@ -1508,7 +1516,7 @@ _notification: youGotPoll: "{name} hat auf deiner Umfrage abgestimmt" youGotMessagingMessageFromUser: "{name} hat dir eine Chatnachricht gesendet" youGotMessagingMessageFromGroup: "In die Gruppe {name} wurde eine Chatnachricht gesendet" - youWereFollowed: "Du hast einen neuen Follower" + youWereFollowed: "ist dir gefolgt" youReceivedFollowRequest: "Du hast eine Follow-Anfrage erhalten" yourFollowRequestAccepted: "Deine Follow-Anfrage wurde akzeptiert" youWereInvitedToGroup: "Du wurdest in eine Gruppe eingeladen" diff --git a/locales/en-US.yml b/locales/en-US.yml index 3f9884dfb1..467fbdfd13 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -97,6 +97,7 @@ cantRenote: "This post can't be renoted." cantReRenote: "A renote can't be renoted." quote: "Quote" pinnedNote: "Pinned note" +pinned: "Pin to profile" you: "You" clickToShow: "Click to show" sensitive: "NSFW" @@ -437,6 +438,7 @@ signinWith: "Sign in with {x}" signinFailed: "Unable to sign in. The username or password you entered is incorrect." tapSecurityKey: "Tap your security key" or: "Or" +language: "Language" uiLanguage: "UI display language" groupInvited: "Invited to group" aboutX: "About {x}" @@ -700,7 +702,13 @@ capacity: "Capacity" inUse: "Used" editCode: "Edit code" apply: "Apply" -receiveAnnouncementFromInstance: "Receive notifications from the instance" +receiveAnnouncementFromInstance: "Receive Email notifications from this instance" +emailNotification: "Email notifications" +_email: + _follow: + title: "You've got a new follower" + _receiveFollowRequest: + title: "You've received a follow request" _plugin: install: "Install plugins" installWarn: "Please do not install untrustworthy plugins." diff --git a/locales/es-ES.yml b/locales/es-ES.yml index 05ac4d4a56..a168ffd90e 100644 --- a/locales/es-ES.yml +++ b/locales/es-ES.yml @@ -96,6 +96,7 @@ cantRenote: "No se puede renotar este post" cantReRenote: "No se puede renotar una renota" quote: "Citar" pinnedNote: "Nota fijada" +pinned: "Fijar" you: "Tú" clickToShow: "Click para ver" sensitive: "Marcado como sensible" @@ -651,6 +652,9 @@ backgroundColor: "Fondo" accentColor: "Acento" textColor: "Texto" value: "Valores" +_email: + _follow: + title: "te ha seguido" _registry: key: "Clave" keys: "Clave" diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index 7f942401a4..c2b2521523 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -96,6 +96,7 @@ renoted: "Republier" cantRenote: "Ce message ne peut pas être republié." quote: "Citer" pinnedNote: "Note épinglée" +pinned: "Épingler sur le profil" you: "Vous" clickToShow: "Cliquer pour afficher" sensitive: "Contenu sensible" @@ -648,6 +649,9 @@ closeAccount: "Fermer le compte" usageAmount: "Utilisation" capacity: "Capacité " inUse: "utilisé" +_email: + _follow: + title: "Vous suit" _registry: key: "Clé " keys: "Clé " diff --git a/locales/id-ID.yml b/locales/id-ID.yml index 4241b781dd..a6c4e80efe 100644 --- a/locales/id-ID.yml +++ b/locales/id-ID.yml @@ -1,5 +1,7 @@ --- _lang_: "Bahasa Jepang" +headlineMisskey: "Catatan terhubung jaringan" +introMisskey: "Selamat datang! Misskey adalah perangkat mikroblog tercatu bersifat sumber terbuka.\nMulailah menuliskan catatan, bagikan peristiwa terkini, serta ceritakan segala tentangmu.📡\nTunjukkan juga reaksimu pada catatan pengguna lain.👍\nMari jelajahi dunia baru🚀" monthAndDay: "{day} {month}" search: "Pencarian" notifications: "Notifikasi" @@ -44,9 +46,30 @@ sendMessage: "Kirim pesan" copyUsername: "Salin nama pengguna" searchUser: "Cari pengguna" reply: "Balas" +loadMore: "Selebihnya" +showMore: "Selebihnya" +youGotNewFollower: "Sedang mengikuti" +receiveFollowRequest: "Permintaan mengikuti terkirim" +mention: "Panggilan" +files: "Berkas" +download: "Unduh" +driveFileDeleteConfirm: "Hapus {name}? Catatan dengan berkas terkait juga akan terhapus." +unfollowConfirm: "Berhenti mengikuti {name}?" +following: "Ikuti" +followers: "Pengikut" +followsYou: "Mengikuti Anda" +error: "Galat" +somethingHappened: "Terjadi kesalahan" +retry: "Coba lagi" +pageLoadError: "Gagal memuat halaman." +pageLoadErrorDescription: "Umumnya disebabkan jaringan atau tembolok perambah. Cobalah bersihkan tembolok peramban lalu tunggu sesaat sebelum mencoba kembali." +privacy: "Keleluasaan" +follow: "Ikuti" +unfollow: "Berhenti mengikuti" cantReRenote: "Renote tidak dapat direnote" quote: "Kutip" pinnedNote: "Note yang disematkan" +pinned: "Sematkan ke profil" you: "Anda" clickToShow: "Klik untuk melihat" sensitive: "Konten sensitif" @@ -190,26 +213,41 @@ invites: "Undang" invitations: "Undang" smtpUser: "Nama Pengguna" smtpPass: "Kata sandi" +_email: + _follow: + title: "Sedang mengikuti" _mfm: + mention: "Panggilan" quote: "Kutip" emoji: "Emoji kustom" search: "Pencarian" +_theme: + keys: + mention: "Panggilan" _sfx: notification: "Notifikasi" chat: "Pesan" _widgets: notifications: "Notifikasi" timeline: "Linimasa" +_cw: + show: "Selebihnya" +_visibility: + followers: "Pengikut" _profile: username: "Nama Pengguna" _exportOrImport: + followingList: "Ikuti" muteList: "Bisukan" blockingList: "Blokir" _rooms: _roomType: default: "Bawaan" _notification: + youWereFollowed: "Sedang mengikuti" _types: + follow: "Ikuti" + mention: "Panggilan" quote: "Kutip" reaction: "Reaksi" _deck: diff --git a/locales/it-IT.yml b/locales/it-IT.yml index 502162b5d3..04f348e10c 100644 --- a/locales/it-IT.yml +++ b/locales/it-IT.yml @@ -1,67 +1,574 @@ --- _lang_: "Italiano" +monthAndDay: "{day}/{month}" search: "Cerca" notifications: "Notifiche" username: "Nome utente" password: "Password" ok: "OK" +cancel: "Annulla" +enterUsername: "Inserisci un nome utente" +renotedBy: "Rinotta da {user}" +noNotes: "Nessuna note" +noNotifications: "Nessuna notifica" instance: "Istanza" settings: "Impostazioni" basicSettings: "Impostazioni generali" otherSettings: "Altre impostazioni" profile: "Profilo" timeline: "Timeline" -login: "Login" +login: "Accedi" logout: "Logout" signup: "Iscriviti" +uploading: "Caricamento..." save: "Salva" users: "Utente" +favorite: "Segnalibri" +favorites: "Segnalibri" +unfavorite: "Rimuovi Nota dai segnalibri" +favorited: "Nota salvato nei segnalibri." +alreadyFavorited: "Tweet salvato nei segnalibri." +pin: "Fissa sul profilo" +unpin: "Non fissare più sul profilo" +copyContent: "Copia il contenuto del Nota" +copyLink: "Copia link" delete: "Elimina" +deleteAndEdit: "Elimina & Modifica" +addToList: "Aggiungi alla lista" +sendMessage: "Invia messaggio" +copyUsername: "Copia nome utente" +searchUser: "Cerca Utente" reply: "Rispondi" +loadMore: "Mostra altre" +showMore: "Mostra altre" +youGotNewFollower: "Nuovo seguace" +receiveFollowRequest: "Nuova richiesta di essere seguito" mention: "Menzioni" +mentions: "Menzioni" +directNotes: "Note diretti" +importAndExport: "Importa ed Esporta" import: "Importa" -note: "Note" -notes: "Notes" +export: "Esporta" +files: "Allegato" +download: "Scarica" +lists: "Liste" +noLists: "Qui non c'è ancora niente" +note: "Nota" +notes: "Nota" +following: "Seiguiti" +followers: "Seguaci" +followsYou: "Ti segue" +createList: "Crea una nuova lista" +manageLists: "Modifica lista" error: "Errore" somethingHappened: "Qualcosa è andato storto." retry: "Riprova" +enterListName: "Inserisci il nome della lista" privacy: "Privacy" -quote: "Cita Note" +follow: "Segui" +followRequest: "Richiesta di seguire" +followRequests: "Richiesta di seguire" +unfollow: "Smetti di seguire" +followRequestPending: "In sospeso" +renote: "Rinotta" +unrenote: "Annulla rinotta" +quote: "Cita Nota" +pinned: "Fissa sul profilo" +you: "Tu" +clickToShow: "Clicca per visualizzare" +sensitive: "Contenuto sensibile" +add: "Aggiungi" +reaction: "Reazione" +attachCancel: "Rimuovi allegato" +markAsSensitive: "Segna come sensibile" +unmarkAsSensitive: "Segna come non sensibile" mute: "Silenzia" +unmute: "Riattiva" block: "Blocca" +unblock: "Sblocca" suspend: "Sospendi" +unsuspend: "Annulla la sospensione dell'account" +blockConfirm: "Vuoi bloccare?" +unblockConfirm: "Vuoi sbloccare?" +editWidgetsExit: "Modifica fine" +emoji: "Emoji" +addAcount: "Aggiungi un account esistente" +general: "Generali" +wallpaper: "Sfondo" +setWallpaper: "Imposta sfondo" +searchWith: "Cerca: {q}" +annotation: "Descrizione" +federation: "Federazione" instances: "Istanza" +storageUsage: "Volume di dischi" +charts: "Grafici" +perHour: "All'ora" +perDay: "al giorno" +software: "Software" +version: "Versione" +metadata: "Metadato" +network: "Rete" +disk: "Disco" +statistics: "Statistiche" +blockedInstances: "Istanza bloccati" +muteAndBlock: "Silenziamento e blocco" +mutedUsers: "Account silenziati" +blockedUsers: "Account bloccati" +editProfile: "Modifica profilo" +noteDeleteConfirm: "Eliminare questo Nota?" +done: "Fine" +processing: "In elaborazione" blocked: "Bloccati" +all: "Tutti" +notResponding: "Nessuna risposta" +changePassword: "Aggiorna Password" +security: "Sicurezza" +retypedNotMatch: "Le password non corrispondono." +currentPassword: "Password attuale" +newPassword: "Nuova Password" +newPasswordRetype: "Conferma nuova password" +more: "Altri!" +lookup: "Cercare" +announcements: "Annuncio" +imageUrl: "URL dell'immagine" remove: "Elimina" +removed: "Il tuo Tweet è stato eliminato" +removeAreYouSure: "Eliminare \"{x}\"?" +deleteAreYouSure: "Eliminare \"{x}\"?" +resetAreYouSure: "Reimposta" saved: "Salvato" +messaging: "Messaggi" +upload: "Carica" +uploadFromUrl: "Incolla URL immagine" +explore: "Esplora" +games: "Misskey Giochi" +messageRead: "Visualizzato" +startMessaging: "Nuovo messaggio" +tos: "Termini di servizio" +home: "Home" +images: "Immagini" birthday: "Compleanno" +yearsOld: "{age}Anni" registeredDate: "Iscrizione a.." location: "Posizione" +theme: "Tema" +light: "Chiaro" +dark: "Scuro" +lightThemes: "Tema Chiaro" +darkThemes: "Tema Scuro" +drive: "Drive" +fileName: "Nome dell'allegato" +copyUrl: "Copia URL" +rename: "Modifica nome" +avatar: "Foto del profilo" +banner: "Foto d'intestazione" +nsfw: "Contenuti sensibili" +reload: "Ricarica" +watch: "Osserva" +unwatch: "Smetti di Osserva" +accept: "Accetta" +reject: "Rifiuta" +normal: "Normale" +instanceName: "Nome dell'istanza" +instanceDescription: "Descrizione dell'istanza" +maintainerName: "Nome dell'Amministratore" +maintainerEmail: "Indirizzo e-mail dell'Amministratore" +tosUrl: "Termini di servizio URL" +thisYear: "Anno" +thisMonth: "Mese" +today: "Oggi" +dayX: "{day}" +monthX: "{month}" +yearX: "{year}" +integration: "App collegate" +connectSerice: "Connetti" +disconnectSerice: "Disconnetti" +registration: "Iscriviti" +invite: "Invita" +bannerUrl: "indirizzo Foto d'intestazione" +basicInfo: "Informazioni fondamentali" +hcaptcha: "hCaptcha" +enableHcaptcha: "Abilita hCaptcha" +recaptcha: "reCAPTCHA" +enableRecaptcha: "Abilita reCAPTCHA" +name: "Nome" +serviceworker: "ServiceWorker" +exploreFediverse: "Esplora Fediverse" +popularTags: "Tag di tendenza" +userList: "Liste" +about: "Informazioni" +aboutMisskey: "Informazioni di Misskey" +administrator: "Amministratore" +token: "Token" +twoStepAuthentication: "Autenticazione a due fattori" +moderator: "Moderatore" +lastUsed: "Ultima attività" +unregister: "Disattiva account" +resetPassword: "Reimposta password" +share: "Condividi" +cacheClear: "Svuota cache" +help: "Guida" +close: "Chiudi" +group: "Gruppo" +groups: "Gruppi" +createGroup: "Nuovo gruppo" +invites: "Invita" +transfer: "Trasferisci" +title: "Titolo" +next: "Avanti" +invitations: "Invita" +invitationCode: "Codice di invito" +available: "Consigliati" +unavailable: "Il nome utente è già in uso" +usernameInvalidFormat: "Il nome utente può contenere solo lettere, numeri e '_'" +tooShort: "Troppo breve" +tooLong: "Troppo lungo" +passwordNotMatched: "Le password non corrispondono." +signinHistory: "Cronologia di accesso all'account" +tags: "Tag" +createAccount: "Crea il tuo account" +existingAcount: "Account esistente" +local: "Locale" +remote: "Remoto" +accountSettings: "Impostazioni Account" +promote: "Pubblicizza" +objectStorageBucket: "Bucket" +objectStorageEndpoint: "Endpoint" +objectStorageRegion: "Region" +serverLogs: "Log del server" +deleteAll: "Cancella cronologia" +volume: "Volume" +details: "Dettagli" +install: "Installa" +uninstall: "Disinstalla" +installedDate: "Data installazione" +sort: "Ordina per" +visibility: "Privacy dei post" +poll: "Sondaggio" +useCw: "Nascondere media" +description: "Descrizione" +author: "Autore" +width: "Larghezza" +height: "Altezza" +large: "Grande" +medium: "Predefinito" +small: "Piccolo" +edit: "Modifica" +email: "Email" smtpUser: "Nome utente" smtpPass: "Password" +wordMute: "Parole silenziate" +display: "Visualizza" +copy: "Copia" +logs: "Log" +database: "Base di dati" +channel: "Canale" +notificationSetting: "impostazioni delle notifiche" +other: "Avanzate" +abuseReports: "Segnala" +reportAbuse: "Segnala" +reportAbuseOf: "Segnala {name}" +random: "Casuale" +system: "Sistema" +optional: "Opzionale" +public: "Pubblico" +yes: "Sì" +no: "No" +contact: "Contatti" +developer: "Sviluppatore" +duplicate: "Duplica" +left: "Sinistra" +center: "Centro" +wide: "Largo" +nNotes: "{n}Nota" +backgroundColor: "Sfondo" +value: "Valore" +saveConfirm: "Vuoi salvare le modifiche?" +deleteConfirm: "Rimuovere?" +registry: "Registro" +closeAccount: "Disattiva account" +currentVersion: "Versione attuale" +latestVersion: "Ultima versione" +editCode: "Modifica codice" +apply: "Applica" +_email: + _follow: + title: "Nuovo seguace" +_registry: + key: "Dati" + keys: "Dati" +_aboutMisskey: + morePatrons: "Ci sono molti altri che ci sostengono. Grazie 🥰" _mfm: mention: "Menzioni" - quote: "Cita Note" + url: "URL" + link: "Link" + bold: "Grassetto" + blockCode: "Codice(blocco)" + inlineMath: "Espressione matematica(Immersione)" + blockMath: "Espressione matematica(blocco)" + quote: "Cita il nota" search: "Cerca" + blur: "Sfocatura" + font: "Tipo di carattere" +_reversi: + black: "Nero" + white: "Bianco" + ended: "Esci" +_channel: + featured: "Tendenze" +_sidebar: + icon: "Foto del profilo" + hide: "Nascondere" _theme: + constant: "Costante" + defaultValue: "Valore predefinito" + color: "Colore" + func: "Funzione" + darken: "Scuro" + lighten: "Chiaro" keys: + bg: "Sfondo" + shadow: "Ombra" mention: "Menzioni" + renote: "Rinotta" + divider: "Interruzione di linea" _sfx: - note: "Notes" + note: "Nota" notification: "Notifiche" + chat: "Messaggi" +_ago: + unknown: "Sconosciuto" + future: "Futuro" + justNow: "Ora" + secondsAgo: "{n}s fa" + minutesAgo: "{n}min fa" + hoursAgo: "{n}h fa" + daysAgo: "{1} giorni fa" + weeksAgo: "{n} settimane fa" + monthsAgo: "{n} mesi fa" + yearsAgo: "{n} anni fa" +_time: + second: "s" + minute: "min" + hour: "ore" + day: "giorni" +_tutorial: + title: "Come usare Misskey" + step1_1: "Benvenuto" +_permissions: + "read:blocks": "Visualizza gli account che hai bloccato." + "write:blocks": "Gestisci gli account che hai bloccato." + "read:favorites": "Visualizza Segnalibri" + "write:favorites": "Gestisci Segnalibri" + "write:following": "Seguiti/ Smetti di seguire" + "read:notifications": "Visualizza notifiche" +_weekday: + sunday: "Domenica" + monday: "Lunedì" + tuesday: "Martedì" + wednesday: "Mercoledì" + thursday: "Giovedì" + friday: "Venerdì" + saturday: "Sabato" _widgets: + memo: "Memo" notifications: "Notifiche" timeline: "Timeline" + calendar: "Calendario" + trends: "Tendenze" + clock: "Orologio" + rss: "Aggregatore rss" + activity: "Attività" + photos: "Foto" + digitalClock: "Orologio digitale" + federation: "Federazione" +_cw: + hide: "Nascondere" + show: "Mostra altre" +_poll: + noMore: "Hai aggiunto il numero massimo di opzioni." + canMultipleVote: "Risposte multiple" + expiration: "Scadenza" + infinite: "Permanente" + deadlineDate: "Data di scadenza" + deadlineTime: "h" + voted: "Votato" + closed: "Terminato" +_visibility: + public: "Pubblico" + home: "Home" + followers: "Seguaci" + localOnly: "Solo Locale" + localOnlyDescription: "Solo locale" +_postForm: + replyPlaceholder: "Nota la tua risposta.." + quotePlaceholder: "Cita Nota..." _profile: + name: "Nome" username: "Nome utente" + description: "Bio" + metadata: "Metadati" + metadataLabel: "Etichetta" + metadataContent: "Contenuto" _exportOrImport: + followingList: "Seiguiti" muteList: "Silenzia" blockingList: "Blocca" + userLists: "Liste" +_timelines: + home: "Home" + local: "Locale" +_rooms: + _roomType: + washitsu: "Washitsu" + _furnitures: + milk: "Cartone del latte" + bed: "Letto" + low-table: "Tavolino Coffee" + desk: "Tavolo" + chair: "Sedia" + chair2: "Sedia 2" + fan: "Ventilatore" + pc: "PC" + plant: "Pianta da appartamento" + plant2: "Pianta da appartamento2" + eraser: "Gomma" + pencil: "Matita" + pudding: "Pudding" + book: "Libro" + book2: "Libro2" + piano: "Pianoforte" + server: "Server" + moon: "Luna" + corkboard: "Bacheca" + mousepad: "Tappetino per il mouse" + monitor: "Monitor " + keyboard: "Tastiera" + mat: "Zerbino" + color-box: "Libreria" + wall-clock: "Orologio da parete" + photoframe: "Cornice" + cube: "Cubo" + tv: "Televisore" + pinguin: "Pinguini" + bin: "Cestino" + cup-noodle: "Noodle istantanei" +_pages: + like: "Mi piace" + unlike: "Togli Mi piace" + variables: "Variabili" + title: "Titolo" + font: "Tipo di carattere" + blocks: + image: "Immagini" + if: "Se" + _if: + variable: "Variabili" + _post: + text: "Contenuto" + _textInput: + text: "Titolo" + _textareaInput: + text: "Titolo" + _numberInput: + text: "Titolo" + _switch: + text: "Titolo" + _counter: + text: "Titolo" + _button: + text: "Titolo" + _action: + _dialog: + content: "Contenuto" + _radioButton: + title: "Titolo" + script: + categories: + comparison: "Metodo comparativo" + random: "Aleatorietà" + value: "Valore" + fn: "Funzione" + list: "Liste" + blocks: + _join: + arg1: "Liste" + _add: + arg1: "A" + arg2: "B" + _subtract: + arg1: "A" + arg2: "B" + _multiply: + arg1: "A" + arg2: "B" + _divide: + arg1: "A" + arg2: "B" + _mod: + arg1: "A" + arg2: "B" + _eq: + arg1: "A" + arg2: "B" + notEq: "A non è uguale a B" + _notEq: + arg1: "A" + arg2: "B" + and: "A e B" + _and: + arg1: "A" + arg2: "B" + or: "A o B" + _or: + arg1: "A" + arg2: "B" + _lt: + arg1: "A" + arg2: "B" + _gt: + arg1: "A" + arg2: "B" + _ltEq: + arg1: "A" + arg2: "B" + _gtEq: + arg1: "A" + arg2: "B" + _if: + arg1: "Se" + random: "Aleatorietà" + _randomPick: + arg1: "Liste" + _dailyRandomPick: + arg1: "Liste" + _seedRandomPick: + arg2: "Liste" + _pick: + arg1: "Liste" + _listLen: + arg1: "Liste" + ref: "Variabili" + fn: "Funzione" + types: + array: "Liste" _notification: + youGotQuote: "{name} ha citato il tuo Nota e ha detto" + youRenoted: "{name} ha rinotta" + youGotPoll: "{name} ha volluto." + youWereFollowed: "Nuovo seguace" _types: + all: "Tutto" + follow: "Seiguiti" mention: "Menzioni" - quote: "Cita Note" + reply: "Rispondi" + renote: "Rinotta" + quote: "Cita il nota" + reaction: "Reazione" _deck: _columns: notifications: "Notifiche" tl: "Timeline" + list: "Liste" + mentions: "Menzioni" diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 5a7272b480..51a82a32b9 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -97,6 +97,7 @@ cantRenote: "この投稿はRenoteできません。" cantReRenote: "RenoteをRenoteすることはできません。" quote: "引用" pinnedNote: "ピン留めされたノート" +pinned: "ピン留め" you: "あなた" clickToShow: "クリックして表示" sensitive: "閲覧注意" @@ -437,6 +438,7 @@ signinWith: "{x}でログイン" signinFailed: "ログインできませんでした。ユーザー名とパスワードを確認してください。" tapSecurityKey: "セキュリティキーにタッチ" or: "もしくは" +language: "言語" uiLanguage: "UIの表示言語" groupInvited: "グループに招待されました" aboutX: "{x}について" @@ -701,6 +703,14 @@ inUse: "使用中" editCode: "コードを編集" apply: "適用" receiveAnnouncementFromInstance: "インスタンスからのお知らせを受け取る" +emailNotification: "メール通知" +inChannelSearch: "チャンネル内検索" + +_email: + _follow: + title: "フォローされました" + _receiveFollowRequest: + title: "フォローリクエストを受け取りました" _plugin: install: "プラグインのインストール" diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml index 8b20d1255f..0015db07b9 100644 --- a/locales/ja-KS.yml +++ b/locales/ja-KS.yml @@ -96,6 +96,7 @@ cantRenote: "この投稿はRenoteできへんらしい。" cantReRenote: "Renote自体はRenoteできへんで。" quote: "引用" pinnedNote: "ピン留めされとるノート" +pinned: "ピン留めしとく" you: "あんた" clickToShow: "押したら見えるで" sensitive: "ちょっとアカンやつやで" @@ -459,6 +460,7 @@ emailConfigInfo: "メールアドレスの確認とかパスワードリセッ smtpHost: "ホスト" smtpUser: "ユーザー名" smtpPass: "パスワード" +notificationSettingDesc: "表示する通知の種類えらんでや。" emailVerified: "メールアドレスは確認されたで" pageLikesCount: "Pageにええやんと思った数" pageLikedCount: "Pageにええやんと思ってくれた数" @@ -468,6 +470,9 @@ onlineUsersCount: "{n}人が起きとるで" sendErrorReportsDescription: "オンにしたら、なんか変なことが起きたときにエラーの詳細がMisskeyに共有されて、ソフトウェアの品質向上に役立てられるんや。エラー情報には、OSのバージョン、ブラウザの種類、行動履歴などが含まれるで。" youAreRunningUpToDateClient: "今使ってるクライアントが最新やで!" newVersionOfClientAvailable: "新しいバージョンのクライアントが使えるで。" +_email: + _follow: + title: "フォローされたで" _mfm: mention: "メンション" quote: "引用" diff --git a/locales/kab-KAB.yml b/locales/kab-KAB.yml index 662c05405d..e96f5b366f 100644 --- a/locales/kab-KAB.yml +++ b/locales/kab-KAB.yml @@ -36,6 +36,9 @@ userList: "Tibdarin" uiLanguage: "Tutlayt n wegrudem" smtpUser: "Isem n umseqdac" smtpPass: "Awal uffir" +_email: + _follow: + title: "Yeṭṭafaṛ-ik·em-id" _mfm: mention: "Bder" search: "Nadi" diff --git a/locales/kn-IN.yml b/locales/kn-IN.yml index 44dbd9304e..cfbb59225e 100644 --- a/locales/kn-IN.yml +++ b/locales/kn-IN.yml @@ -53,10 +53,14 @@ files: "ಕಡತಗಳು" download: "ಜಾಲದಿಂದಿಳಿಸು" driveFileDeleteConfirm: "\"{name}\" ಕಡತವನ್ನು ಅಳಿಸಲು ನೀವು ಬಯಸುವಿರಾ? ಈ ನೋಡಿರಿ ಲಗತ್ತಿಸಲಾದ ಟಿಪ್ಪಣಿ ಸಹ ಕಣ್ಮರೆಯಾಗುತ್ತದೆ." unfollowConfirm: "{name}ಅನ್ನು ಹಿಂಬಾಲಿಸದಿರುವುದೇ?" +pinned: "ಪ್ರೊಫ಼ೈಲಿಗೆ ಅಂಟಿಸು" instances: "ನಿದರ್ಶನ" remove: "ಅಳಿಸು" smtpUser: "ಬಳಕೆಹೆಸರು" smtpPass: "ಗುಪ್ತಪದ" +_email: + _follow: + title: "ಹಿಂಬಾಲಿಸಿದರು" _mfm: search: "ಹುಡುಕು" _sfx: diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index 1cbdd7a662..0e6fd71c38 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -1,5 +1,6 @@ --- _lang_: "한국어" +headlineMisskey: "노트로 연결되는 네트워크" introMisskey: "환영합니다! Misskey 는 오픈 소스 분산형 마이크로 블로그 서비스입니다.\n\"노트\" 를 작성해서, 지금 일어나고 있는 일을 공유하거나, 당신만의 이야기를 모두에게 발신하세요📡\n\"리액션\" 기능으로, 친구의 노트에 총알같이 반응을 추가할 수도 있습니다👍\n새로운 세계를 탐험해 보세요🚀" monthAndDay: "{month}월 {day}일" search: "검색" @@ -96,6 +97,7 @@ cantRenote: "이 게시물은 Renote할 수 없습니다." cantReRenote: "Renote를 Renote할 수 없습니다." quote: "인용" pinnedNote: "고정해놓은 노트" +pinned: "프로필에 고정" you: "당신" clickToShow: "클릭하여 보기" sensitive: "열람주의" @@ -436,6 +438,7 @@ signinWith: "{x}로 로그인" signinFailed: "로그인할 수 없습니다. 사용자명과 비밀번호를 확인하여 주십시오." tapSecurityKey: "보안 키를 터치" or: "혹은" +language: "언어" uiLanguage: "UI 표시 언어" groupInvited: "그룹에 초대되었습니다" aboutX: "{x}에 대하여" @@ -687,6 +690,14 @@ deleteConfirm: "삭제하시겠습니까?" invalidValue: "올바른 값이 아닙니다." registry: "레지스트리" closeAccount: "계정 폐쇄" +usageAmount: "사용량" +capacity: "용량" +inUse: "사용중" +editCode: "코드 수정" +apply: "적용" +_email: + _follow: + title: "새로운 팔로워가 있습니다" _registry: scope: "범위" key: "키" @@ -834,6 +845,7 @@ _theme: deleteConstantConfirm: "상수 {const}를 삭제하시겠습니까?" keys: accent: "강조 색상" + panel: "패널" link: "링크" hashtag: "해시태그" mention: "멘션" @@ -1126,6 +1138,7 @@ _pages: created: "페이지를 만들었습니다" updated: "페이지를 수정했습니다" deleted: "페이지가 삭제되었습니다" + pageSetting: "페이지 설정" nameAlreadyExists: "지정한 페이지 URL이 이미 존재합니다" invalidNameTitle: "유효하지 않은 페이지 URL입니다" invalidNameText: "비어있지 않은지 확인해주세요" @@ -1136,6 +1149,7 @@ _pages: unlike: "좋아요 해제" my: "내 페이지" liked: "좋아요한 페이지" + featured: "인기" inspector: "인스펙터" contents: "콘텐츠" content: "페이지 블록" @@ -1191,7 +1205,10 @@ _pages: id: "캔버스 ID" width: "폭" height: "높이" + note: "노트필기" _note: + id: "노트 ID" + idDescription: "노트 URL을 붙여넣어 설정할 수도 있습니다." detailed: "세부 정보 보기" switch: "스위치" _switch: @@ -1434,7 +1451,9 @@ _deck: swapDown: "아래로 이동" stackLeft: "왼쪽에 쌓기" popRight: "오른쪽으로 빼기" + profile: "프로파일" _columns: + main: "메인" widgets: "위젯" notifications: "알림" tl: "타임라인" diff --git a/locales/pl-PL.yml b/locales/pl-PL.yml index 16efd03860..c4c771665e 100644 --- a/locales/pl-PL.yml +++ b/locales/pl-PL.yml @@ -93,6 +93,7 @@ cantRenote: "Ten wpis nie może zostać udostępniony." cantReRenote: "Udostępnienie nie może zostać udostępnione." quote: "Cytuj" pinnedNote: "Przypięty wpis" +pinned: "Przypnij do profilu" you: "Ty" clickToShow: "Kliknij, aby wyświetlić" sensitive: "NSFW" @@ -643,6 +644,9 @@ backgroundColor: "Tło" accentColor: "Akcent" textColor: "Tekst" value: "Wartość" +_email: + _follow: + title: "Zaobserwował(a) Cię" _registry: key: "Klucz" keys: "Klucz" diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml index 0ca8e8d10a..07cd456796 100644 --- a/locales/ru-RU.yml +++ b/locales/ru-RU.yml @@ -97,6 +97,7 @@ cantRenote: "Это нельзя репостить." cantReRenote: "Невозможно репостить репост." quote: "Цитата" pinnedNote: "Закреплённая заметка" +pinned: "Закрепить в профиле" you: "Вы" clickToShow: "Нажмите для просмотра" sensitive: "Содержимое не для всех" @@ -437,6 +438,7 @@ signinWith: "Использовать {x} для входа" signinFailed: "Невозможно войти в систему. Введенное вами имя пользователя или пароль неверны." tapSecurityKey: "Нажмите на свой электронный ключ" or: "или" +language: "Язык" uiLanguage: "Язык интерфейса" groupInvited: "Приглашение в группу" aboutX: "Описание {x}" @@ -701,6 +703,12 @@ inUse: "Занято" editCode: "Редактировать исходный текст" apply: "Применить" receiveAnnouncementFromInstance: "Получать оповещения с инстанса" +emailNotification: "Уведомления по электронной почте" +_email: + _follow: + title: "Новый подписчик" + _receiveFollowRequest: + title: "Новый запрос на подписку." _plugin: install: "Установка расширений" installWarn: "Пожалуйста, не устанавливайте расширения, которым не доверяете." diff --git a/locales/uk-UA.yml b/locales/uk-UA.yml index 1b54a2f9c4..e08ae46ba3 100644 --- a/locales/uk-UA.yml +++ b/locales/uk-UA.yml @@ -1,7 +1,7 @@ --- _lang_: "Українська" headlineMisskey: "Мережа об'єднана записами" -introMisskey: "Ласкаво просимо! Misskey - децентралізована служба мікроблогів з відкритим кодом.\nСтворюйте \"записи\", щоб поділитися тим, що відбувається, і розповісти всім про себе 📡\nЗа допомогою \"реакцій\" ви також можете швидко висловити свої почуття щодо записів інших 👍\nДавайте досліджувати новий світ 🚀" +introMisskey: "Ласкаво просимо! Misskey - децентралізована служба мікроблогів з відкритим кодом.\nСтворюйте \"нотатки\", щоб поділитися тим, що відбувається, і розповісти всім про себе 📡\nЗа допомогою \"реакцій\" ви також можете швидко висловити свої почуття щодо нотаток інших 👍\nДосліджуймо новий світ! 🚀" monthAndDay: "{month}/{day}" search: "Пошук" notifications: "Сповіщення" @@ -97,6 +97,7 @@ cantRenote: "Неможливо поширити." cantReRenote: "Поширення не можливо поширити." quote: "Цитата" pinnedNote: "Закріплений запис" +pinned: "Закріпити" you: "Ви" clickToShow: "Натисніть для перегляду" sensitive: "NSFW" @@ -688,6 +689,9 @@ deleteConfirm: "Ви дійсно бажаєте це видалити?" invalidValue: "Некоректне значення." registry: "Реєстр" closeAccount: "Закрити обліковий запис" +_email: + _follow: + title: "Новий підписник" _registry: key: "Ключ" keys: "Ключі" @@ -978,6 +982,7 @@ _weekday: friday: "П'ятниця" saturday: "Субота" _widgets: + memo: "Нагадування" notifications: "Сповіщення" timeline: "Стрічка" calendar: "Календар" @@ -991,7 +996,10 @@ _widgets: postForm: "Створення нотатки" slideshow: "Слайд-шоу" button: "Кнопка" + onlineUsers: "Користувачі онлайн" jobQueue: "Черга завдань" + serverMetric: "Показники сервера " + aiscript: "Консоль AiScript" _cw: hide: "Сховати" show: "Показати більше" @@ -999,10 +1007,13 @@ _cw: files: "{count} файлів" _poll: noOnlyOneChoice: "Потрібні принаймні два варіанти." + choiceN: "Варіант {n}" noMore: "Більше варіантів додати не можна" canMultipleVote: "Можна вибрати кілька варіантів" expiration: "Опитування закінчується" infinite: "Ніколи" + at: "На даті..." + after: "Через..." deadlineDate: "Дата закінчення" deadlineTime: "г" duration: "Тривалість" diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index 8ac29a51f6..f19562b1e4 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -97,6 +97,7 @@ cantRenote: "该帖子无法转发。" cantReRenote: "转发无法被再次转发。" quote: "引用" pinnedNote: "已置顶的帖子" +pinned: "置顶" you: "您" clickToShow: "点击以显示" sensitive: "敏感内容" @@ -437,6 +438,7 @@ signinWith: "以{x}登录" signinFailed: "无法登录,请检查您的用户名和密码。" tapSecurityKey: "轻触硬件安全密钥" or: "或者" +language: "语言" uiLanguage: "显示语言" groupInvited: "群组招待" aboutX: "关于 {x}" @@ -701,6 +703,12 @@ inUse: "已使用" editCode: "编辑代码" apply: "应用" receiveAnnouncementFromInstance: "从实例接收通知" +emailNotification: "邮件通知" +_email: + _follow: + title: "你有新的关注者" + _receiveFollowRequest: + title: "收到关注请求" _plugin: install: "安装插件" installWarn: "请不要安装不可信的插件。" diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml index 73a1c5e80e..9d95c958d1 100644 --- a/locales/zh-TW.yml +++ b/locales/zh-TW.yml @@ -97,6 +97,7 @@ cantRenote: "無法轉發此貼文。" cantReRenote: "無法轉發之前已經轉發過的內容" quote: "引用" pinnedNote: "已置頂的貼文" +pinned: "置頂" you: "您" clickToShow: "按一下以顯示" sensitive: "敏感內容" @@ -163,6 +164,7 @@ storageUsage: "已使用容量" charts: "圖表" perHour: "每小時" perDay: "每日" +stopActivityDelivery: "停止發送活動" blockThisInstance: "封鎖此實例" operations: "操作" software: "軟體" @@ -582,6 +584,7 @@ channel: "頻道" create: "新增" notificationSetting: "通知設定" notificationSettingDesc: "選擇顯示通知的類型" +useGlobalSetting: "使用全域設定" other: "其他" regenerateLoginToken: "再生登入權杖" regenerateLoginTokenDescription: "再生用於登入的內部權杖。一般情況下是不需要這樣做的。一旦再生,所有裝置將會被登出。" @@ -674,6 +677,9 @@ newVersionOfClientAvailable: "新版本的用戶端可用。" usageAmount: "使用量" capacity: "容量" inUse: "已使用" +_email: + _follow: + title: "您有新的追隨者" _registry: scope: "範圍" key: "機碼" diff --git a/migration/1613155914446-emailNotificationTypes.ts b/migration/1613155914446-emailNotificationTypes.ts new file mode 100644 index 0000000000..d6908aecfa --- /dev/null +++ b/migration/1613155914446-emailNotificationTypes.ts @@ -0,0 +1,14 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class emailNotificationTypes1613155914446 implements MigrationInterface { + name = 'emailNotificationTypes1613155914446' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_profile" ADD "emailNotificationTypes" jsonb NOT NULL DEFAULT '["follow","receiveFollowRequest","groupInvited"]'`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "emailNotificationTypes"`); + } + +} diff --git a/migration/1613181457597-user-lang.ts b/migration/1613181457597-user-lang.ts new file mode 100644 index 0000000000..ac1fc88c99 --- /dev/null +++ b/migration/1613181457597-user-lang.ts @@ -0,0 +1,14 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class userLang1613181457597 implements MigrationInterface { + name = 'userLang1613181457597' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_profile" ADD "lang" character varying(32)`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "lang"`); + } + +} diff --git a/migration/1613503367223-use-bigint-for-driveUsage.ts b/migration/1613503367223-use-bigint-for-driveUsage.ts new file mode 100644 index 0000000000..d04e817ec5 --- /dev/null +++ b/migration/1613503367223-use-bigint-for-driveUsage.ts @@ -0,0 +1,15 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class useBigintForDriveUsage1613503367223 implements MigrationInterface { + name = 'useBigintForDriveUsage1613503367223' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "instance" ALTER COLUMN "driveUsage" TYPE bigint`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "instance" DROP COLUMN "driveUsage"`); + await queryRunner.query(`ALTER TABLE "instance" ADD "driveUsage" integer NOT NULL DEFAULT 0`); + } + +} diff --git a/package.json b/package.json index 3ec7a6495e..42f986cda3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "misskey", "author": "syuilo ", - "version": "12.69.0", + "version": "12.70.0", "codename": "indigo", "repository": { "type": "git", @@ -114,10 +114,11 @@ "autobind-decorator": "2.4.0", "autosize": "4.0.2", "autwh": "0.1.0", - "aws-sdk": "2.839.0", + "aws-sdk": "2.840.0", "bcryptjs": "2.4.3", "blurhash": "1.1.3", - "bull": "3.20.0", + "broadcast-channel": "3.4.1", + "bull": "3.20.1", "cafy": "15.2.1", "cbor": "6.0.1", "chalk": "4.1.0", @@ -127,7 +128,7 @@ "content-disposition": "0.5.3", "core-js": "3.8.3", "crc-32": "1.2.0", - "css-loader": "5.0.1", + "css-loader": "5.0.2", "cssnano": "4.1.10", "dateformat": "4.5.1", "diskusage": "1.1.3", @@ -154,7 +155,7 @@ "http-proxy-agent": "4.0.1", "http-signature": "1.3.5", "https-proxy-agent": "5.0.0", - "idb-keyval": "5.0.1", + "idb-keyval": "5.0.2", "insert-text-at-cursor": "0.3.0", "is-root": "2.1.0", "is-svg": "4.2.1", @@ -177,15 +178,15 @@ "langmap": "0.0.16", "lookup-dns-cache": "2.1.0", "markdown-it": "12.0.4", - "markdown-it-anchor": "7.0.1", + "markdown-it-anchor": "7.0.2", "matter-js": "0.16.1", - "mocha": "8.2.1", + "mocha": "8.3.0", "moji": "0.5.1", "ms": "2.1.3", "multer": "1.4.2", "nested-property": "4.0.0", "node-fetch": "2.6.1", - "nodemailer": "6.4.17", + "nodemailer": "6.4.18", "object-assign-deep": "0.4.0", "os-utils": "0.0.14", "p-cancelable": "2.0.0", @@ -193,7 +194,7 @@ "parsimmon": "1.16.0", "pg": "8.5.1", "portscanner": "2.2.0", - "postcss": "8.2.4", + "postcss": "8.2.5", "postcss-loader": "5.0.0", "prismjs": "1.23.0", "probe-image-size": "6.0.0", @@ -218,7 +219,7 @@ "rndstr": "1.0.0", "s-age": "1.1.2", "sass": "1.32.6", - "sass-loader": "11.0.0", + "sass-loader": "11.0.1", "seedrandom": "3.0.5", "sharp": "0.27.1", "speakeasy": "2.0.0", @@ -233,12 +234,12 @@ "throttle-debounce": "3.0.1", "tinycolor2": "1.4.2", "tmp": "0.2.1", - "ts-loader": "8.0.15", + "ts-loader": "8.0.16", "ts-node": "9.1.1", "tslint": "6.1.3", "tslint-sonarts": "1.9.0", "typeorm": "0.2.30", - "typescript": "4.1.3", + "typescript": "4.1.5", "ulid": "2.3.0", "url-loader": "4.1.1", "uuid": "8.3.2", @@ -253,7 +254,7 @@ "vue-style-loader": "4.1.2", "vuedraggable": "4.0.1", "web-push": "3.4.4", - "webpack": "5.21.1", + "webpack": "5.21.2", "webpack-cli": "4.5.0", "websocket": "1.0.33", "ws": "7.4.3", diff --git a/src/client/account.ts b/src/client/account.ts index e6ee8613d2..e5b451cf14 100644 --- a/src/client/account.ts +++ b/src/client/account.ts @@ -1,6 +1,7 @@ import { reactive } from 'vue'; import { apiUrl } from '@/config'; import { waiting } from '@/os'; +import { unisonReload } from '@/scripts/unison-reload'; // TODO: 他のタブと永続化されたstateを同期 @@ -62,6 +63,7 @@ export function updateAccount(data) { for (const [key, value] of Object.entries(data)) { $i[key] = value; } + localStorage.setItem('account', JSON.stringify($i)); } export function refreshAccount() { @@ -74,7 +76,7 @@ export async function login(token: Account['token']) { const me = await fetchAccount(token); localStorage.setItem('account', JSON.stringify(me)); addAccount(me.id, token); - location.reload(); + unisonReload(); } // このファイルに書きたくないけどここに書かないと何故かVeturが認識しない diff --git a/src/client/components/emoji-picker.vue b/src/client/components/emoji-picker.vue index c2d1008e1b..9a261ef83f 100644 --- a/src/client/components/emoji-picker.vue +++ b/src/client/components/emoji-picker.vue @@ -99,7 +99,8 @@ import { faHeart, faFlag, faLaugh } from '@fortawesome/free-regular-svg-icons'; import MkModal from '@/components/ui/modal.vue'; import Particle from '@/components/particle.vue'; import * as os from '@/os'; -import { isDeviceTouch } from '../scripts/is-device-touch'; +import { isDeviceTouch } from '@/scripts/is-device-touch'; +import { isMobile } from '@/scripts/is-mobile'; import { emojiCategories } from '@/instance'; export default defineComponent({ @@ -322,7 +323,7 @@ export default defineComponent({ }, mounted() { - if (!os.isMobile) { + if (!isMobile && !isDeviceTouch) { this.$refs.search.focus({ preventScroll: true }); diff --git a/src/client/components/form/input.vue b/src/client/components/form/input.vue index c8c22e95c7..f0aa6b0534 100644 --- a/src/client/components/form/input.vue +++ b/src/client/components/form/input.vue @@ -1,63 +1,50 @@ @@ -112,11 +144,6 @@ export default defineComponent({ } } - > .save { - margin: 6px 0 0 0; - font-size: 0.8em; - } - &.tall { > .input { > textarea { diff --git a/src/client/components/global/avatar.vue b/src/client/components/global/avatar.vue index 9f8b0eeca1..d2f25fa41e 100644 --- a/src/client/components/global/avatar.vue +++ b/src/client/components/global/avatar.vue @@ -1,8 +1,8 @@ diff --git a/src/client/components/note.vue b/src/client/components/note.vue index b839ab3e8f..d532289857 100644 --- a/src/client/components/note.vue +++ b/src/client/components/note.vue @@ -1,6 +1,6 @@