Compare commits

...

10 Commits

Author SHA1 Message Date
syuilo 559ad2f80c New translations ja-JP.yml (Uzbek) 2023-07-27 09:17:50 +09:00
syuilo 6b0f636267 New translations ja-JP.yml (Portuguese) 2023-07-27 09:17:49 +09:00
woxtu cb0fa9a8ab
Use promises API (#11351) 2023-07-27 09:04:19 +09:00
猫ロキP@deflis 5083458071
refactor: forkでデフォルトのノート文字数を変更した場合、E2Eテストが落ちる問題を修正する (#11366)
* forkでデフォルトのノート文字数を変更した場合このテストが落ちる問題を修正する

* 文字数についてのコメントを追加しておく
2023-07-27 09:00:48 +09:00
setaria 78b502bcab
URL取得変数を関数に変更 #11392 (#11393) 2023-07-27 09:00:22 +09:00
syuilo 324d18983a
New Crowdin updates (#11389)
* New translations ja-JP.yml (French)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Hungarian)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Hungarian)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Portuguese)
2023-07-27 08:57:34 +09:00
kabo2468 71b016b293
fix: PhotoSwipeによるクライアントのメモリリークの解消 (#11395)
* Destroy PhotoSwipe on unmounted

* Update CHANGELOG.md
2023-07-27 06:44:16 +09:00
Acid Chicken (硫酸鶏) 090253c2d2
fix(frontend): replies to channel posts could change the visibility 2023-07-27 00:58:37 +09:00
Acid Chicken (硫酸鶏) cf3ac3c0be
build: close #10953 2023-07-26 22:06:00 +09:00
tamaina b8360b1b5a fix(frontend): Remove errors in prefeerences-backups.vue 2023-07-26 12:40:45 +00:00
19 changed files with 559 additions and 188 deletions

View File

@ -16,9 +16,11 @@
### Client ### Client
- リストTLで、ユーザーが追加・削除されてもTLを初期化しないように - リストTLで、ユーザーが追加・削除されてもTLを初期化しないように
- URL取得変数を関数に変更 CURRENT_URL -> Mk:url()
- Fix: モバイル表示のときページ下部がナビゲーションバーに隠れる問題を修正 - Fix: モバイル表示のときページ下部がナビゲーションバーに隠れる問題を修正
- Fix: 一部モーダルダイアログでスクロールできない問題を修正 - Fix: 一部モーダルダイアログでスクロールできない問題を修正
- Fix: Selecting all emojis in Custom emoji is impossible - Fix: Selecting all emojis in Custom emoji is impossible
- Fix: PhotoSwipeによるメモリリークの修正
### Server ### Server
- Fix: APIのオフセットが壊れていたせいで「もっと見る」でもっと見れない問題を修正 - Fix: APIのオフセットが壊れていたせいで「もっと見る」でもっと見れない問題を修正

View File

@ -1042,7 +1042,7 @@ vertical: "Vertical"
horizontal: "Horizontal" horizontal: "Horizontal"
position: "Position" position: "Position"
serverRules: "Server rules" serverRules: "Server rules"
pleaseConfirmBelowBeforeSignup: "Please confirm the below before signing up." pleaseConfirmBelowBeforeSignup: "To register on this server, you must review and agree to the following:"
pleaseAgreeAllToContinue: "You must agree to all above fields to continue." pleaseAgreeAllToContinue: "You must agree to all above fields to continue."
continue: "Continue" continue: "Continue"
preservedUsernames: "Reserved usernames" preservedUsernames: "Reserved usernames"
@ -1999,7 +1999,7 @@ _deck:
introduction: "Create the perfect interface for you by arranging columns freely!" introduction: "Create the perfect interface for you by arranging columns freely!"
introduction2: "Click on the + on the right of the screen to add new colums whenever you want." introduction2: "Click on the + on the right of the screen to add new colums whenever you want."
widgetsIntroduction: "Please select \"Edit widgets\" in the column menu and add a widget." widgetsIntroduction: "Please select \"Edit widgets\" in the column menu and add a widget."
useSimpleUiForNonRootPages: "Use simple UI for navigated pages" useSimpleUiForNonRootPages: "Use simplified UI to navigated pages"
_columns: _columns:
main: "Main" main: "Main"
widgets: "Widgets" widgets: "Widgets"

View File

@ -83,7 +83,7 @@ noLists: "Vous navez aucune liste"
note: "Note" note: "Note"
notes: "Notes" notes: "Notes"
following: "Abonnements" following: "Abonnements"
followers: "Abonné·e·s" followers: "Abonnés"
followsYou: "Vous suit" followsYou: "Vous suit"
createList: "Créer une liste" createList: "Créer une liste"
manageLists: "Gérer les listes" manageLists: "Gérer les listes"
@ -122,7 +122,7 @@ reaction: "Réactions"
reactions: "Réactions" reactions: "Réactions"
reactionSetting: "Réactions à afficher dans le sélecteur de réactions" reactionSetting: "Réactions à afficher dans le sélecteur de réactions"
reactionSettingDescription2: "Déplacer pour réorganiser, cliquer pour effacer, utiliser « + » pour ajouter." reactionSettingDescription2: "Déplacer pour réorganiser, cliquer pour effacer, utiliser « + » pour ajouter."
rememberNoteVisibility: "Activer l'option \" se souvenir de la visibilité des notes \" vous permet de réutiliser automatiquement la visibilité utilisée lors de la publication de votre note précédente." rememberNoteVisibility: "Se souvenir de la visibilité des notes"
attachCancel: "Supprimer le fichier attaché" attachCancel: "Supprimer le fichier attaché"
markAsSensitive: "Marquer comme sensible" markAsSensitive: "Marquer comme sensible"
unmarkAsSensitive: "Supprimer le marquage comme sensible" unmarkAsSensitive: "Supprimer le marquage comme sensible"

View File

@ -1 +1,103 @@
--- ---
_lang_: "Japán"
monthAndDay: "{month}.{day}."
search: "Keresés"
notifications: "Értesítések"
username: "Felhasználónév"
password: "Jelszó"
forgotPassword: "Elfelejtett jelszó"
ok: "OK"
gotIt: "Rendben"
cancel: "Mégse"
noThankYou: "Nem, köszönöm"
enterUsername: "Felhasználónév megadása"
renotedBy: "{user} Renotolta"
noNotes: "Nincs Note"
noNotifications: "Nincs értesítés"
instance: "Szerver"
settings: "Beállítások"
notificationSettings: "Értesítés beállításai"
basicSettings: "Alapbeállítás"
otherSettings: "Egyéb beállítások"
openInWindow: "Megnyitás ablakban"
profile: "Saját profil"
timeline: "Idővonal"
noAccountDescription: "Nincs leírás"
login: "Bejelentkezés"
loggingIn: "Belépés"
logout: "Kijelentkezés"
signup: "Regisztráció"
uploading: "Feltöltés"
save: "Mentés"
users: "Felhasználók"
addUser: "Felhasználó hozzáadása"
favorite: "Kedvencek"
favorites: "Kedvencek"
unfavorite: "Törlés a kedvencek közül."
favorited: "Kedvencek közé rakva."
alreadyFavorited: "Már a kedvencek között van."
cantFavorite: "Nem sikerült a kedvencek közé rakni."
pin: "Rögzítés"
unpin: "Rögzítés feloldása"
copyContent: "Tartalom másolása"
copyLink: "Hivatkozás Másolása"
delete: "Törlés"
deleteAndEdit: "Törlés és szerkesztés"
deleteAndEditConfirm: "Biztosan törlöd ezt a jegyzetet és újrafogalmazza? Így eveszíted az összes reakciót, renote-ot és választ."
addToList: "Hozzáadás a listákhoz"
privacy: "Adatvédelem"
makeFollowManuallyApprove: "Csak jóváhagyással követhetnek"
defaultNoteVisibility: "Alapértelmezett láthatóság"
follow: "Követés"
followRequest: "Követés kérése"
followRequests: "Követési kérések"
unfollow: "Követés visszavonása"
followRequestPending: "Függőben levő követési kérés"
enterEmoji: "Írj egy emoji-t"
renote: "Renote"
unrenote: "Renote visszavonása"
renoted: "Renotolva"
cantRenote: "Nem lehet Renotolni"
cantReRenote: "A Renote nem renotálható"
quote: "Idézet"
inChannelRenote: "Csak csatornán bellüli Renote"
inChannelQuote: "Csak csatornán bellüli idézet"
pinnedNote: "Csatolt jegyzet"
pinned: "Rögzítés"
you: "Te"
clickToShow: "Kattints ide"
sensitive: "Érzékeny"
add: "Hozzáad"
reaction: "Reakciók"
reactions: "Reakciók"
instances: "Szerver"
remove: "Törlés"
pinnedNotes: "Csatolt jegyzet"
smtpUser: "Felhasználónév"
smtpPass: "Jelszó"
user: "Felhasználók"
searchByGoogle: "Keresés"
_theme:
keys:
renote: "Renote"
_sfx:
notification: "Értesítések"
_2fa:
renewTOTPCancel: "Nem, köszönöm"
_widgets:
profile: "Saját profil"
notifications: "Értesítések"
timeline: "Idővonal"
_profile:
username: "Felhasználónév"
_notification:
_types:
renote: "Renote"
quote: "Idézet"
reaction: "Reakciók"
_actions:
renote: "Renote"
_deck:
_columns:
notifications: "Értesítések"
tl: "Idővonal"

View File

@ -49,11 +49,15 @@ delete: "Hapus"
deleteAndEdit: "Hapus dan sunting" deleteAndEdit: "Hapus dan sunting"
deleteAndEditConfirm: "Apakah kamu yakin ingin menghapus note ini dan menyuntingnya? Kamu akan kehilangan semua reaksi, renote dan balasan di note ini." deleteAndEditConfirm: "Apakah kamu yakin ingin menghapus note ini dan menyuntingnya? Kamu akan kehilangan semua reaksi, renote dan balasan di note ini."
addToList: "Tambahkan ke daftar" addToList: "Tambahkan ke daftar"
addToAntenna: "Tambahkan ke Antena"
sendMessage: "Kirim pesan" sendMessage: "Kirim pesan"
copyRSS: "Salin RSS" copyRSS: "Salin RSS"
copyUsername: "Salin nama pengguna" copyUsername: "Salin nama pengguna"
copyUserId: "Salin ID pengguna" copyUserId: "Salin ID pengguna"
copyNoteId: "Salin ID catatan" copyNoteId: "Salin ID catatan"
copyFileId: "Salin Berkas"
copyFolderId: "Salin Folder"
copyProfileUrl: "Salin Alamat Web Profil"
searchUser: "Cari pengguna" searchUser: "Cari pengguna"
reply: "Balas" reply: "Balas"
loadMore: "Selebihnya" loadMore: "Selebihnya"
@ -313,6 +317,7 @@ copyUrl: "Salin tautan"
rename: "Ubah nama" rename: "Ubah nama"
avatar: "Avatar" avatar: "Avatar"
banner: "Banner" banner: "Banner"
displayOfSensitiveMedia: "Tampilkan media NSFW"
whenServerDisconnected: "Ketika kehilangan koneksi dengan peladen" whenServerDisconnected: "Ketika kehilangan koneksi dengan peladen"
disconnectedFromServer: "Terputus koneksi dari peladen" disconnectedFromServer: "Terputus koneksi dari peladen"
reload: "Muat ulang" reload: "Muat ulang"
@ -1066,6 +1071,11 @@ installed: "Terpasang"
branding: "Merek" branding: "Merek"
enableServerMachineStats: "Tampilkan informasi mesin peladen menjadi publik" enableServerMachineStats: "Tampilkan informasi mesin peladen menjadi publik"
enableIdenticonGeneration: "Nyalakan pembuatan Identicon per pengguna" enableIdenticonGeneration: "Nyalakan pembuatan Identicon per pengguna"
turnOffToImprovePerformance: "Matikan untuk tingkatkan performa."
createInviteCode: "Buat kode undangan"
inviteCodeCreated: "Kode undangan dibuat"
inviteLimitExceeded: "Kamu telah mencapai jumlah maksimum kode undangan yang dapat dibuat."
expirationDate: "Tanggal kedaluwarsa"
_initialAccountSetting: _initialAccountSetting:
accountCreated: "Akun kamu telah sukses dibuat!" accountCreated: "Akun kamu telah sukses dibuat!"
letsStartAccountSetup: "Untuk pemula, ayo atur profilmu dulu." letsStartAccountSetup: "Untuk pemula, ayo atur profilmu dulu."

View File

@ -621,10 +621,10 @@ smtpHost: "Server remoto"
smtpPort: "Porta" smtpPort: "Porta"
smtpUser: "Nome utente" smtpUser: "Nome utente"
smtpPass: "Password" smtpPass: "Password"
emptyToDisableSmtpAuth: "Lasciare il nome utente e la password vuoti per disabilitare la verifica SMTP" emptyToDisableSmtpAuth: "Lasciare i campi vuoti se non c'è autenticazione SMTP"
smtpSecure: "Usare la porta SSL/TLS implicito per le connessioni SMTP" smtpSecure: "Usare SSL/TLS implicito per le connessioni SMTP"
smtpSecureInfo: "Disabilitare quando è attivo STARTTLS." smtpSecureInfo: "Disabilitare quando è attivo STARTTLS."
testEmail: "Testa la consegna di posta elettronica" testEmail: "Verifica il funzionamento"
wordMute: "Filtri parole" wordMute: "Filtri parole"
regexpError: "errore regex" regexpError: "errore regex"
regexpErrorDescription: "Si è verificato un errore nell'espressione regolare alla riga {line} della parola muta {tab}:" regexpErrorDescription: "Si è verificato un errore nell'espressione regolare alla riga {line} della parola muta {tab}:"
@ -1091,6 +1091,9 @@ usedAt: "Usato alle"
unused: "Inutilizzato" unused: "Inutilizzato"
used: "Utilizzato" used: "Utilizzato"
expired: "Scaduto" expired: "Scaduto"
doYouAgree: "Sei d'accordo?"
beSureToReadThisAsItIsImportant: "Si prega di leggere attentamente perché è importante."
iHaveReadXCarefullyAndAgree: "Ho letto accuratamente \"{x}\" e sono d'accordo."
_initialAccountSetting: _initialAccountSetting:
accountCreated: "Il tuo profilo è stato creato!" accountCreated: "Il tuo profilo è stato creato!"
letsStartAccountSetup: "Per iniziare, impostiamo il tuo profilo." letsStartAccountSetup: "Per iniziare, impostiamo il tuo profilo."
@ -1444,7 +1447,7 @@ _sensitiveMediaDetection:
_emailUnavailable: _emailUnavailable:
used: "Email già in uso" used: "Email già in uso"
format: "Formato email non valido" format: "Formato email non valido"
disposable: "Email non riutilizzabile" disposable: "Indirizzo email non utilizzabile"
mx: "Server email non corretto" mx: "Server email non corretto"
smtp: "Il server email non risponde" smtp: "Il server email non risponde"
_ffVisibility: _ffVisibility:

View File

@ -25,7 +25,7 @@ basicSettings: "Configurações básicas"
otherSettings: "Outras configurações" otherSettings: "Outras configurações"
openInWindow: "Abrir em um janela" openInWindow: "Abrir em um janela"
profile: "Perfil" profile: "Perfil"
timeline: "Timeline" timeline: "Linha do tempo"
noAccountDescription: "Este usuário não tem uma descrição." noAccountDescription: "Este usuário não tem uma descrição."
login: "Iniciar sessão" login: "Iniciar sessão"
loggingIn: "Iniciando sessão…" loggingIn: "Iniciando sessão…"
@ -41,7 +41,7 @@ unfavorite: "Remover dos favoritos"
favorited: "Adicionado aos favoritos." favorited: "Adicionado aos favoritos."
alreadyFavorited: "Já adicionado aos favoritos." alreadyFavorited: "Já adicionado aos favoritos."
cantFavorite: "Não foi possível adicionar aos favoritos." cantFavorite: "Não foi possível adicionar aos favoritos."
pin: "Afixar no perfil" pin: "Fixar no perfil"
unpin: "Desafixar do perfil" unpin: "Desafixar do perfil"
copyContent: "Copiar conteúdos" copyContent: "Copiar conteúdos"
copyLink: "Copiar link" copyLink: "Copiar link"
@ -50,11 +50,11 @@ deleteAndEdit: "Excluir e editar"
deleteAndEditConfirm: "Deseja excluir esta nota e editá-la novamente? Todas as reações, compartilhamentos e respostas a esta nota também serão excluídas." deleteAndEditConfirm: "Deseja excluir esta nota e editá-la novamente? Todas as reações, compartilhamentos e respostas a esta nota também serão excluídas."
addToList: "Adicionar a lista" addToList: "Adicionar a lista"
addToAntenna: "Adicionar à antena" addToAntenna: "Adicionar à antena"
sendMessage: "Enviar uma mensagem" sendMessage: "Enviar mensagem"
copyRSS: "Copiar RSS" copyRSS: "Copiar RSS"
copyUsername: "Copiar nome de utilizador" copyUsername: "Copiar nome de utilizador"
copyUserId: "Copiar o ID do utilizador" copyUserId: "Copiar ID do utilizador"
copyNoteId: "Copiar o ID da publicação" copyNoteId: "Copiar ID da publicação"
copyFileId: "Copiar o ID do arquivo" copyFileId: "Copiar o ID do arquivo"
copyFolderId: "Copiar o ID da pasta" copyFolderId: "Copiar o ID da pasta"
copyProfileUrl: "Copiar a URL do perfil" copyProfileUrl: "Copiar a URL do perfil"
@ -89,7 +89,7 @@ createList: "Criar lista"
manageLists: "Gerenciar listas" manageLists: "Gerenciar listas"
error: "Erro" error: "Erro"
somethingHappened: "Ocorreu um erro" somethingHappened: "Ocorreu um erro"
retry: "Tentar novamente" retry: "Tente novamente"
pageLoadError: "Ocorreu um erro ao carregar a página." pageLoadError: "Ocorreu um erro ao carregar a página."
pageLoadErrorDescription: "Isso geralmente acontece devido ao cache do navegador ou da rede. Tente limpar o cache ou aguarde um pouco antes de tentar novamente." pageLoadErrorDescription: "Isso geralmente acontece devido ao cache do navegador ou da rede. Tente limpar o cache ou aguarde um pouco antes de tentar novamente."
serverIsDead: "Não há resposta do servidor. Aguarde um momento e tente novamente." serverIsDead: "Não há resposta do servidor. Aguarde um momento e tente novamente."
@ -231,7 +231,7 @@ federating: "Federando"
blocked: "Bloqueado" blocked: "Bloqueado"
suspended: "Suspenso" suspended: "Suspenso"
all: "Todos" all: "Todos"
subscribing: "Subscrito" subscribing: "Inscrito"
publishing: "Publicando" publishing: "Publicando"
notResponding: "Sem resposta" notResponding: "Sem resposta"
instanceFollowing: "Seguir a instância" instanceFollowing: "Seguir a instância"
@ -278,7 +278,7 @@ agreeBelow: "Eu concordo com o seguinte"
basicNotesBeforeCreateAccount: "Observações importantes" basicNotesBeforeCreateAccount: "Observações importantes"
termsOfService: "Termos de Uso" termsOfService: "Termos de Uso"
start: "começar" start: "começar"
home: "casa" home: "Home"
remoteUserCaution: "As informações estão incompletas porque é um utilizador remoto." remoteUserCaution: "As informações estão incompletas porque é um utilizador remoto."
activity: "atividade" activity: "atividade"
images: "imagem" images: "imagem"
@ -713,35 +713,111 @@ pageLikedCount: "Número de curtidas recebidas nas suas páginas"
contact: "Contato" contact: "Contato"
useSystemFont: "Utilizar a fonte padrão do sistema" useSystemFont: "Utilizar a fonte padrão do sistema"
clips: "Clipe" clips: "Clipe"
experimentalFeatures: "Funcionalidades Experimentais"
experimental: "Experimental"
thisIsExperimentalFeature: "Este é um recurso experimental. As funções podem mudar ou pode não funcionar corretamente."
developer: "Programador"
makeExplorable: "Deixe a sua conta mais fácil de encontrar."
makeExplorableDescription: "Se você desativá-lo, outros usuários não poderão encontrar a sua conta na aba Descoberta."
showGapBetweenNotesInTimeline: "Mostrar um espaço entre as notas na linha de tempo"
duplicate: "Duplicar" duplicate: "Duplicar"
left: "Esquerda" left: "Esquerda"
center: "Centralizar"
wide: "Largo" wide: "Largo"
narrow: "Estreito" narrow: "Estreito"
reloadToApplySetting: "As configurações serão refletidas após recarregar a página. Deseja recarregar agora?"
needReloadToApply: "É necessário recarregar a página para refletir as alterações."
showTitlebar: "Exibir barra de título" showTitlebar: "Exibir barra de título"
clearCache: "Limpar o cache" clearCache: "Limpar o cache"
onlineUsersCount: "Pessoas Online"
nUsers: "Usuários"
nNotes: "Notas"
sendErrorReports: "Enviar relatórios de erro"
sendErrorReportsDescription: "Ao ativar essa opção, informações detalhadas de erro serão compartilhadas com o Misskey em caso de problemas, o que pode ajudar a melhorar a qualidade do software. As informações de erro podem incluir a versão do sistema operacional, o tipo de navegador e o sua atividade no Misskey." sendErrorReportsDescription: "Ao ativar essa opção, informações detalhadas de erro serão compartilhadas com o Misskey em caso de problemas, o que pode ajudar a melhorar a qualidade do software. As informações de erro podem incluir a versão do sistema operacional, o tipo de navegador e o sua atividade no Misskey."
myTheme: "Meu tema"
backgroundColor: "Cor de fundo" backgroundColor: "Cor de fundo"
accentColor: "Cor de destaque"
textColor: "Cor do texto"
saveAs: "Salvar como"
advanced: "Avançado" advanced: "Avançado"
advancedSettings: "Configurações avançadas"
value: "Valor" value: "Valor"
createdAt: "Data de criação"
updatedAt: "Última atualização"
saveConfirm: "Deseja salvá-lo?"
deleteConfirm: "Confirma a exclusão?" deleteConfirm: "Confirma a exclusão?"
invalidValue: "Valor inválido"
registry: "Registo"
closeAccount: "Encerrar conta"
currentVersion: "Versão Atual"
latestVersion: "Última versão"
youAreRunningUpToDateClient: "Você está usando a última versão do cliente"
newVersionOfClientAvailable: "Nova versão do cliente disponível"
usageAmount: "Quantidade utilizada"
capacity: "Capacidade" capacity: "Capacidade"
inUse: "Em uso"
editCode: "Editar código"
apply: "Aplicar" apply: "Aplicar"
receiveAnnouncementFromInstance: "Receba as notificações da instância"
emailNotification: "Notificações por e-mail" emailNotification: "Notificações por e-mail"
publish: "Publicar" publish: "Publicar"
inChannelSearch: "Pesquisar no canal"
useReactionPickerForContextMenu: "Clique com o botão direito do mouse para abrir o seletor de reações."
typingUsers: "digitando"
jumpToSpecifiedDate: "Pular para uma data específica"
showingPastTimeline: "Visualizar linha de tempo anterior"
clear: "Limpar"
markAllAsRead: "Marcar todas como lidas"
goBack: "Voltar" goBack: "Voltar"
unlikeConfirm: "Deseja realmente deixar de curtir?" unlikeConfirm: "Deseja realmente deixar de curtir?"
fullView: "Visão completa"
quitFullView: "Sair da visualização completa"
addDescription: "Adicionar descrição"
info: "Informações" info: "Informações"
userInfo: "Informações do Usuário"
unknown: "Desconhecido" unknown: "Desconhecido"
onlineStatus: "On-line"
hideOnlineStatus: "Ocultar o status on-line."
online: "Online"
enabled: "Ativado" enabled: "Ativado"
disabled: "Desativado" disabled: "Desativado"
quickAction: "Ações rápidas"
user: "Usuários" user: "Usuários"
administration: "Administrar" administration: "Administrar"
accounts: "Contas"
gallery: "Galeria"
recentPosts: "Notas recentes"
popularPosts: "Notas populares"
shareWithNote: "Compartilhar em Notas"
ads: "Anúncios" ads: "Anúncios"
expiration: "Data limite"
startingperiod: "Data de início"
memo: "Nota"
priority: "Prioridade"
high: "Alto"
middle: "Meio" middle: "Meio"
low: "Baixo"
emailNotConfiguredWarning: "Endereço de e-mail não configurado. " emailNotConfiguredWarning: "Endereço de e-mail não configurado. "
ratio: "Ratio"
previewNoteText: "Visualizar Nota"
customCss: "CSS Personalizado"
squareAvatars: "Exibir ícones quadrados"
sent: "Enviar" sent: "Enviar"
received: "Recebido"
searchResult: "Pesquisar"
hashtags: "Hashtags"
troubleshooting: "Resolução de problemas"
useBlurEffect: "Usar efeito de desfoque na UI"
learnMore: "Saiba mais"
whatIsNew: "Ver atualizações"
translate: "Traduzir" translate: "Traduzir"
translatedFrom: "Traduzido de"
accountDeletionInProgress: "Encerramento de conta em andamento"
usernameInfo: "O nome para identificar exclusivamente a sua conta no servidor. Pode conter letras (az, AZ), números (0~9) e sublinhados (_). O nome de usuário não pode ser alterado posteriormente." usernameInfo: "O nome para identificar exclusivamente a sua conta no servidor. Pode conter letras (az, AZ), números (0~9) e sublinhados (_). O nome de usuário não pode ser alterado posteriormente."
aiChanMode: "Modo AI-chan"
devMode: "Modo de Desenvolvedor"
lastCommunication: "Ultima atualização"
resolved: "Resolvido"
breakFollow: "Remover seguidor" breakFollow: "Remover seguidor"
breakFollowConfirm: "Deseja realmente deixar de seguir?" breakFollowConfirm: "Deseja realmente deixar de seguir?"
on: "Ligado" on: "Ligado"
@ -752,15 +828,33 @@ deleteAccountConfirm: "Deseja realmente excluir a conta?"
hide: "Ocultar" hide: "Ocultar"
useDrawerReactionPickerForMobile: "Mostrar em formato de gaveta" useDrawerReactionPickerForMobile: "Mostrar em formato de gaveta"
clickToFinishEmailVerification: "Clique em [{ok}] para completar a validação do endereço de e-mail." clickToFinishEmailVerification: "Clique em [{ok}] para completar a validação do endereço de e-mail."
overridedDeviceKind: "Sobrepor dispositivo"
smartphone: "Celular"
tablet: "Tablet"
auto: "Automático" auto: "Automático"
themeColor: "Cor do tema"
size: "Tamanho"
numberOfColumn: "Número da coluna"
searchByGoogle: "Buscar" searchByGoogle: "Buscar"
mutePeriod: "Duração de silenciamento"
period: "Data limite"
indefinitely: "Indefinitivamente"
tenMinutes: "10 minutos"
oneHour: "1 hora"
oneDay: "1 dia"
oneWeek: "1 semana"
oneMonth: "1 mês"
rateLimitExceeded: "Taxa limite excedido"
file: "Ficheiros" file: "Ficheiros"
noEmailServerWarning: "Servidor de e-mail não configurado." noEmailServerWarning: "Servidor de e-mail não configurado."
recommended: "Recomendado"
check: "Verificar"
driveCapOverrideLabel: "Altere a capacidade do drive para este usuário" driveCapOverrideLabel: "Altere a capacidade do drive para este usuário"
driveCapOverrideCaption: "Altere a capacidade para o valor padrão informando o valor 0 ou inferior." driveCapOverrideCaption: "Altere a capacidade para o valor padrão informando o valor 0 ou inferior."
deleteAccount: "Excluir conta" deleteAccount: "Excluir conta"
enableAutoSensitiveDescription: "Quando disponível, a marcação de mídia sensível será automaticamente atribuído ao conteúdo de mídia usando aprendizado de máquina. Mesmo que você desative essa função, em alguns servidores, isso pode ser configurado automaticamente." enableAutoSensitiveDescription: "Quando disponível, a marcação de mídia sensível será automaticamente atribuído ao conteúdo de mídia usando aprendizado de máquina. Mesmo que você desative essa função, em alguns servidores, isso pode ser configurado automaticamente."
activeEmailValidationDescription: "A validação do endereço de e-mail do usuário será realizada de forma mais rigorosa, considerando se é um endereço descartável ou se é possível realizar comunicação efetiva. Se desativado, apenas a validade do formato do endereço será verificada como uma sequência de caracteres." activeEmailValidationDescription: "A validação do endereço de e-mail do usuário será realizada de forma mais rigorosa, considerando se é um endereço descartável ou se é possível realizar comunicação efetiva. Se desativado, apenas a validade do formato do endereço será verificada como uma sequência de caracteres."
account: "Contas"
like: "Curtir" like: "Curtir"
unlike: "Remover curtida" unlike: "Remover curtida"
numberOfLikes: "Número de curtidas" numberOfLikes: "Número de curtidas"
@ -778,6 +872,7 @@ rolesAssignedToMe: "Cargos atribuídos a mim"
unfavoriteConfirm: "Deseja realmente remover dos favoritos?" unfavoriteConfirm: "Deseja realmente remover dos favoritos?"
drivecleaner: "Limpeza do drive" drivecleaner: "Limpeza do drive"
retryAllQueuesConfirmTitle: "Gostaria de tentar novamente agora?" retryAllQueuesConfirmTitle: "Gostaria de tentar novamente agora?"
horizontal: "Exibir painel lateral inteiro"
preservedUsernamesDescription: "Liste os nomes de usuário que deseja reservar, separando-os por quebras de linha. Os nomes de usuário especificados aqui não poderão ser utilizados durante a criação de contas. No entanto, esta restrição não se aplica quando a conta é criada por um administrador. Além disso, as contas que já existem não serão afetadas." preservedUsernamesDescription: "Liste os nomes de usuário que deseja reservar, separando-os por quebras de linha. Os nomes de usuário especificados aqui não poderão ser utilizados durante a criação de contas. No entanto, esta restrição não se aplica quando a conta é criada por um administrador. Além disso, as contas que já existem não serão afetadas."
channelArchiveConfirmTitle: "Deseja realmente arquivar {name}?" channelArchiveConfirmTitle: "Deseja realmente arquivar {name}?"
youFollowing: "Seguindo" youFollowing: "Seguindo"
@ -1038,7 +1133,9 @@ _emailUnavailable:
_ffVisibility: _ffVisibility:
public: "Publicar" public: "Publicar"
followers: "Visível apenas para seguidores" followers: "Visível apenas para seguidores"
private: "Esconder"
_signup: _signup:
almostThere: "Quase pronto"
emailAddressInfo: "Por favor, insira o seu endereço de e-mail. Ele não será divulgado." emailAddressInfo: "Por favor, insira o seu endereço de e-mail. Ele não será divulgado."
emailSent: "Um e-mail de confirmação foi enviado para o endereço de e-mail fornecido ({email}). Acesse o link fornecido no e-mail para concluir a criação de sua conta." emailSent: "Um e-mail de confirmação foi enviado para o endereço de e-mail fornecido ({email}). Acesse o link fornecido no e-mail para concluir a criação de sua conta."
_accountDelete: _accountDelete:
@ -1050,6 +1147,8 @@ _accountDelete:
inProgress: "A exclusão está em andamento" inProgress: "A exclusão está em andamento"
_ad: _ad:
back: "Voltar" back: "Voltar"
reduceFrequencyOfThisAd: "Diminuir frequência deste anúncio"
hide: "Não exibir anúncios"
_forgotPassword: _forgotPassword:
enterEmail: "Por favor, insira o endereço de e-mail usado no cadastro de sua conta. Um link para redefinição de senha será enviado para esse endereço." enterEmail: "Por favor, insira o endereço de e-mail usado no cadastro de sua conta. Um link para redefinição de senha será enviado para esse endereço."
ifNoEmail: "Caso você não tenha registrado um endereço de e-mail, por favor, entre em contato com o administrador." ifNoEmail: "Caso você não tenha registrado um endereço de e-mail, por favor, entre em contato com o administrador."
@ -1070,8 +1169,16 @@ _preferencesBackups:
_channel: _channel:
featured: "Destaques" featured: "Destaques"
following: "Seguindo" following: "Seguindo"
usersCount: "usuários ativos"
notesCount: "notas"
nameAndDescription: "Nome e descrição"
_menuDisplay:
sideFull: "Exibir painel lateral inteiro"
top: "Exibir barra superior"
hide: "Ocultar"
_theme: _theme:
description: "Descrição" description: "Descrição"
alpha: "Opacidade"
deleteConstantConfirm: "Confirma a exclusão da constante {const}?" deleteConstantConfirm: "Confirma a exclusão da constante {const}?"
keys: keys:
mention: "Menção" mention: "Menção"

View File

@ -1,7 +1,7 @@
--- ---
_lang_: "O'zbek tili" _lang_: "O'zbek tili"
headlineMisskey: "Qaydlar tarmog'i" headlineMisskey: "Qaydlar tarmog'i"
introMisskey: "Xush kelibsiz! Misskey ochiq kodli, markazlashmagan mikroblogging xizmati.\nO'zingizni fikrlaringizni atrofingizdagilar bilan ulashish uchun \"Qaydlar\" yarating. 📡\nUstiga-ustak, \"Reaktsiyalar\" yordamida siz boshqalarning xatlari haqidagi o'zingizni xissiyotlaringizni tez ravishda bildiring. 👍\nQani, yangi dunyoni kashf qilaylik! 🚀" introMisskey: "Xush kelibsiz! Misskey ochiq kodli, markazlashmagan mikroblogging xizmati.\nO'zingizni fikrlaringizni atrofingizdagilar bilan ulashish uchun \"Qaydlar\" yarating. 📡\nUstiga-ustak, \"Reaktsiyalar\" yordamida siz boshqalarning xatlari haqidagi o'zingizni xissiyotlaringizni bildiring. 👍\nQani, yangi dunyoni kashf qilaylik! 🚀"
poweredByMisskeyDescription: "{name} ochiq manbali <b>Misskey</b>(\"Misskey instance\" deb ataladi) platformasi tomonidan qurilgan servislardan biri. " poweredByMisskeyDescription: "{name} ochiq manbali <b>Misskey</b>(\"Misskey instance\" deb ataladi) platformasi tomonidan qurilgan servislardan biri. "
monthAndDay: "{day}/{month}" monthAndDay: "{day}/{month}"
search: "Izlash" search: "Izlash"
@ -17,10 +17,10 @@ noThankYou: "Hozir emas"
enterUsername: "Foydalanuvchini nomini kiriting" enterUsername: "Foydalanuvchini nomini kiriting"
renotedBy: "{user} tomonidan qayta qayd etildi" renotedBy: "{user} tomonidan qayta qayd etildi"
noNotes: "Qaydlar mavjud emas" noNotes: "Qaydlar mavjud emas"
noNotifications: "Xabarnomalar mavjud emas" noNotifications: "Xabarlar mavjud emas"
instance: "Server" instance: "Server"
settings: "Sozalamalar" settings: "Sozlamalar"
notificationSettings: "Xabarnomalar sozlamalari" notificationSettings: "Xabarnoma sozlamalari"
basicSettings: "Asosiy sozlamalar" basicSettings: "Asosiy sozlamalar"
otherSettings: "Qoshimcha sozlamalar" otherSettings: "Qoshimcha sozlamalar"
openInWindow: "Yangi oynada ochish" openInWindow: "Yangi oynada ochish"
@ -36,7 +36,7 @@ save: "Saqlash"
users: "Foydalanuvchilar" users: "Foydalanuvchilar"
addUser: "Foydalanuvchi qo'shish" addUser: "Foydalanuvchi qo'shish"
favorite: "Sevimli" favorite: "Sevimli"
favorites: "Sevimli" favorites: "Sevimlilar"
unfavorite: "Sevimlidan chiqarish" unfavorite: "Sevimlidan chiqarish"
favorited: "sevimli" favorited: "sevimli"
alreadyFavorited: "allaqachon sevimlilar orasida" alreadyFavorited: "allaqachon sevimlilar orasida"
@ -47,7 +47,7 @@ copyContent: "Tarkibini nusxalash"
copyLink: "Havolani nuxalash" copyLink: "Havolani nuxalash"
delete: "O'chirib tashlash" delete: "O'chirib tashlash"
deleteAndEdit: "O'chirish va tahrirlash" deleteAndEdit: "O'chirish va tahrirlash"
deleteAndEditConfirm: "O'chirib, tahrirlamoqchiligingizga ishonchingiz komilmi? Siz bu qaydga tegishli barcha reaktsiyalar, qayta qaydlar va javoblarni yo'qotasiz." deleteAndEditConfirm: "O'chirib, tahrirlamoqchiligingizga ishonchingiz komilmi? Siz bu qaydga tegishli barcha reaktsiyalar va javoblarni yo'qotasiz."
addToList: "Royxatga qoshish" addToList: "Royxatga qoshish"
addToAntenna: "Antennaga qo'shish" addToAntenna: "Antennaga qo'shish"
sendMessage: "Xabar yuborish" sendMessage: "Xabar yuborish"
@ -74,7 +74,7 @@ import: "Import"
export: "Eksport" export: "Eksport"
files: "Fayllar" files: "Fayllar"
download: "Yuklab olish" download: "Yuklab olish"
driveFileDeleteConfirm: "\"{name}\" o'chirib tashlamoqchimisiz? Buni ishlatadihan kontentni hammasidan o'chadi" driveFileDeleteConfirm: "\"{name}\" o'chirib tashlamoqchimisiz? Ushbu fayldan foydalanadigan har qanday kontent ham oʻchiriladi."
unfollowConfirm: "{name}ga obunani bekor qilmoqchimisiz?" unfollowConfirm: "{name}ga obunani bekor qilmoqchimisiz?"
exportRequested: "Eksport so'raldi. Bu ozgina vaqt olishi mumkin. Tugatilgandan so'ng sizning Diskingizga qo'shiladi" exportRequested: "Eksport so'raldi. Bu ozgina vaqt olishi mumkin. Tugatilgandan so'ng sizning Diskingizga qo'shiladi"
importRequested: "Import so'raldi. Bu ozgina vaqt olishi mumkin." importRequested: "Import so'raldi. Bu ozgina vaqt olishi mumkin."
@ -91,7 +91,7 @@ error: "Xato"
somethingHappened: "Xatolik yuz berdi" somethingHappened: "Xatolik yuz berdi"
retry: "Qayta urinib ko'rish" retry: "Qayta urinib ko'rish"
pageLoadError: "Sahifani yuklayotganda xatolik yuz berdi" pageLoadError: "Sahifani yuklayotganda xatolik yuz berdi"
pageLoadErrorDescription: "Buni odatda tarmoq muammolari yoki browser keshi keltirib chiqaradi. Keshni tozalab, keyinroq urinib ko'ring" pageLoadErrorDescription: "Buni odatda tarmoq muammolarni yoki browser keshi keltirib chiqaradi. Keshni tozalab, keyinroq urinib ko'ring"
serverIsDead: "Server javob bermayabdi. Iltimos kuting va keyinroq urinib ko'ring" serverIsDead: "Server javob bermayabdi. Iltimos kuting va keyinroq urinib ko'ring"
youShouldUpgradeClient: "Iltimos, ushbu sahifani ko'rish uchun sahifani yangilang." youShouldUpgradeClient: "Iltimos, ushbu sahifani ko'rish uchun sahifani yangilang."
enterListName: "Ro'yxatga nom kiriting" enterListName: "Ro'yxatga nom kiriting"
@ -101,18 +101,18 @@ defaultNoteVisibility: "Standart ko'rinish"
follow: "Obuna bolish" follow: "Obuna bolish"
followRequest: "Obuna bo'lish uchun ruxsat olish" followRequest: "Obuna bo'lish uchun ruxsat olish"
followRequests: "Obuna bo'lmoqchilar" followRequests: "Obuna bo'lmoqchilar"
unfollow: "obunani bker qilish" unfollow: "obunani bekor qilish"
followRequestPending: "obuna bo'lishga ruxsat kutilmoqda" followRequestPending: "obuna bo'lishga ruxsat kutilmoqda"
enterEmoji: "Emojini kiriting" enterEmoji: "Emojini kiriting"
renote: "Qayta qaydetish" renote: "Qayta qayd etish"
unrenote: "Qayta qayd etishni bekor qilish" unrenote: "Qayta qayd etishni bekor qilish"
renoted: "Qayta qaydetildi" renoted: "Qayta qayd etildi"
cantRenote: "Qyta qayd etish mumkin emas" cantRenote: "Qayta qayd etish mumkin emas"
cantReRenote: "Repostni qayta joylashtirish mumkin emas." cantReRenote: "Repostni qayta joylashtirish mumkin emas."
quote: "Iqtibos keltirish" quote: "Iqtibos keltirish"
inChannelRenote: "Faqat kanalga qayta qayd etish" inChannelRenote: "Faqat kanalga qayta qayd etish"
inChannelQuote: "Kanaldagi eslatmalar" inChannelQuote: "Kanaldagi eslatmalar"
pinnedNote: "Qadanlgan qayd" pinnedNote: "Qadalgan qayd"
pinned: "Profilga qadab qo'yish" pinned: "Profilga qadab qo'yish"
you: "Siz" you: "Siz"
clickToShow: "Ko'rsatish uchun bosing" clickToShow: "Ko'rsatish uchun bosing"
@ -120,7 +120,7 @@ sensitive: "Sezuvchan"
add: "Qo'shish" add: "Qo'shish"
reaction: "Reaktsiyalar" reaction: "Reaktsiyalar"
reactions: "Reaktsiyalar" reactions: "Reaktsiyalar"
reactionSetting: "Reaksiyalar ro'yxatingiz " reactionSetting: "Reaksiyalar ro'yxati"
reactionSettingDescription2: "Qayta tartiblash uchun ushlab turib siljiting, oʻchirish uchun bosing, qoʻshish uchun “+” tugmasini bosing." reactionSettingDescription2: "Qayta tartiblash uchun ushlab turib siljiting, oʻchirish uchun bosing, qoʻshish uchun “+” tugmasini bosing."
rememberNoteVisibility: "Qaydning ko'rinish sozlamarini eslab qolish" rememberNoteVisibility: "Qaydning ko'rinish sozlamarini eslab qolish"
attachCancel: "Qo'shimchani olib tashlash" attachCancel: "Qo'shimchani olib tashlash"
@ -159,10 +159,10 @@ cacheRemoteFilesDescription: "Ushbu sozlama o'chirilgan bo'lsa tashqi fayllar be
cacheRemoteSensitiveFiles: "Tashqi fayllarni keshlash" cacheRemoteSensitiveFiles: "Tashqi fayllarni keshlash"
cacheRemoteSensitiveFilesDescription: "Bu sozlama oʻchiq boʻlsa, \"barcha ko'rishi mumkin bo'lmagan\" fayllar keshlashsiz toʻgʻridan-toʻgʻri masofaviy serverdan yuklanadi." cacheRemoteSensitiveFilesDescription: "Bu sozlama oʻchiq boʻlsa, \"barcha ko'rishi mumkin bo'lmagan\" fayllar keshlashsiz toʻgʻridan-toʻgʻri masofaviy serverdan yuklanadi."
flagAsBot: "Ushbu akkauntni bot sifatida belgilash" flagAsBot: "Ushbu akkauntni bot sifatida belgilash"
flagAsBotDescription: "Agar bu akkaunt bot tomonidan boshqaralayotgan bo'ls, bu sozlamani yoqing. Sozlama yoqilganda, boshqa foydalanuvchilar uchun belgi sifatida ishlaydi, va Misskey ichki tizimlari bu akkauntni bot ekanini biladi." flagAsBotDescription: "Agar bu akkaunt bot tomonidan boshqaralayotgan bo'lsa, bu sozlamani yoqing. Sozlama yoqilganda, boshqa foydalanuvchilar uchun belgi sifatida ishlaydi, va Misskey ichki tizimlari bu akkauntni bot ekanini biladi."
flagAsCat: "Bu akkauntni mushuk sifatida belgilash" flagAsCat: "Bu akkauntni mushuk sifatida belgilash"
flagAsCatDescription: "Ushbu akkauntni mushuk sifatida belgilash uchun ushbu sozlamani yoqing." flagAsCatDescription: "Ushbu akkauntni mushuk sifatida belgilash uchun ushbu sozlamani yoqing."
flagShowTimelineReplies: "Javbolarni xronogoliya bo'yicha ko'rsatish" flagShowTimelineReplies: "Javoblarni xronogoliya bo'yicha ko'rsatish"
flagShowTimelineRepliesDescription: "Bu parametr yoqilganda, lentada foydalanuvchi xabarlariga javob berilgan xabarlar ham ko'rinadi" flagShowTimelineRepliesDescription: "Bu parametr yoqilganda, lentada foydalanuvchi xabarlariga javob berilgan xabarlar ham ko'rinadi"
autoAcceptFollowed: "Obunachilarni avtomatik ravishda qabul qilish" autoAcceptFollowed: "Obunachilarni avtomatik ravishda qabul qilish"
addAccount: "Akkaunt qo'shish" addAccount: "Akkaunt qo'shish"
@ -177,6 +177,7 @@ searchWith: "Izlash: {q}"
youHaveNoLists: "Sizda hech qanday ro'yxatlar mavjud emas" youHaveNoLists: "Sizda hech qanday ro'yxatlar mavjud emas"
followConfirm: "{name} ga obuna bo'lmoqchimisiz?" followConfirm: "{name} ga obuna bo'lmoqchimisiz?"
proxyAccount: "Proksi hisob" proxyAccount: "Proksi hisob"
proxyAccountDescription: "Proksi-hisob qaydnomasi - bu ma'lum shartlar ostida foydalanuvchi uchun masofaviy kuzatuvchi sifatida ishlaydigan hisob. Misol uchun, foydalanuvchi uzoq foydalanuvchini roʻyxatga qoʻyganda, roʻyxatdagi foydalanuvchini hech kim kuzatib turmasa, faoliyat serverga yetkazilmaydi, shuning uchun biz proksi hisobi ularning oʻrniga ularni kuzatishini xohlaymiz."
host: "Host" host: "Host"
selectUser: "Foydalanuvchini tanlang" selectUser: "Foydalanuvchini tanlang"
recipient: "Qabul qiluvchi" recipient: "Qabul qiluvchi"
@ -206,8 +207,11 @@ instanceInfo: "Instans haqida ma'lumot"
statistics: "Statistika" statistics: "Statistika"
clearQueue: "Navbatni tozalash" clearQueue: "Navbatni tozalash"
clearQueueConfirmTitle: "Navbatni tozalamoqchimisiz?" clearQueueConfirmTitle: "Navbatni tozalamoqchimisiz?"
clearQueueConfirmText: "Yetkazib berilmagan xabarlar yetkazilmaydi. Odatda buni qilish shart emas."
clearCachedFiles: "Keshni tozalash" clearCachedFiles: "Keshni tozalash"
clearCachedFilesConfirm: "Barcha keshlangan masofaviy fayllar oʻchirilsinmi?"
blockedInstances: "Bloklangan serverlar" blockedInstances: "Bloklangan serverlar"
blockedInstancesDescription: "Bloklanmoqchi bo'lgan serverlaringiz hostlarini yangi qatorlar bilan ajrating. Bloklangan server bu server bilan ozaro aloqada bolmaydi. Subdomenlar ham bloklangan."
muteAndBlock: "Ovozsiz va Bloklangan" muteAndBlock: "Ovozsiz va Bloklangan"
mutedUsers: "Ovozsiz foydalanuvchilar" mutedUsers: "Ovozsiz foydalanuvchilar"
blockedUsers: "Bloklangan foydalanuvchilar" blockedUsers: "Bloklangan foydalanuvchilar"
@ -223,12 +227,16 @@ default: "Odatiy"
defaultValueIs: "Sukut bo'yicha: {value}" defaultValueIs: "Sukut bo'yicha: {value}"
noCustomEmojis: "Emojilar mavjud emas" noCustomEmojis: "Emojilar mavjud emas"
noJobs: "Vazifalar yo'q" noJobs: "Vazifalar yo'q"
federating: "Ittifoqdosh"
blocked: "Bloklangan" blocked: "Bloklangan"
suspended: "To'xtatilgan" suspended: "To'xtatilgan"
all: "Barcha" all: "Barcha"
subscribing: "Obuna bo'lish" subscribing: "Obuna bo'lish"
publishing: "Yuborilmoqda" publishing: "Yuborilmoqda"
notResponding: "Javob bermayapti" notResponding: "Javob bermayapti"
instanceFollowing: "server obuna bo'ladi"
instanceFollowers: "server obunachisi"
instanceUsers: "server foydalanuvchisi"
changePassword: "Parolni ozgartirish" changePassword: "Parolni ozgartirish"
security: "Xavfsizlik" security: "Xavfsizlik"
retypedNotMatch: "Maydonlar mos kelmayapti" retypedNotMatch: "Maydonlar mos kelmayapti"
@ -237,6 +245,7 @@ newPassword: "Yangi parol"
newPasswordRetype: "Yangi parolni boshqatdan tering" newPasswordRetype: "Yangi parolni boshqatdan tering"
attachFile: "Fayl biriktirish" attachFile: "Fayl biriktirish"
more: "Ko'proq!" more: "Ko'proq!"
featured: "ta'kidlash"
noSuchUser: "Foydalanuvchi topilmadi" noSuchUser: "Foydalanuvchi topilmadi"
lookup: "So'rov" lookup: "So'rov"
announcements: "Bildirishnomalar" announcements: "Bildirishnomalar"
@ -250,9 +259,13 @@ saved: "Saqlandi"
messaging: "Suhbat" messaging: "Suhbat"
upload: "Yuklash" upload: "Yuklash"
keepOriginalUploading: "Asl rasmni saqlang" keepOriginalUploading: "Asl rasmni saqlang"
fromUrl: "URL dan"
uploadFromUrlDescription: "Yuklamoqchi bo'lgan faylingizga havola" uploadFromUrlDescription: "Yuklamoqchi bo'lgan faylingizga havola"
uploadFromUrlRequested: "yuklab olish so'ralgan"
uploadFromUrlMayTakeTime: "Yuklash tugallanishi uchun biroz vaqt ketishi mumkin."
explore: "Ko'rib chiqish" explore: "Ko'rib chiqish"
messageRead: "Oqildi" messageRead: "Oqildi"
noMoreHistory: "Buning ortida hech qanday hikoya yo'q"
startMessaging: "Yangi suhbatni boshlash" startMessaging: "Yangi suhbatni boshlash"
nUsersRead: "{n} tomonidan o'qildi" nUsersRead: "{n} tomonidan o'qildi"
agreeTo: "Men {0} ga roziman" agreeTo: "Men {0} ga roziman"
@ -276,6 +289,7 @@ light: "Yorug'"
dark: "Qorongʻi" dark: "Qorongʻi"
lightThemes: "Yorug rang sxemasi" lightThemes: "Yorug rang sxemasi"
darkThemes: "Qorong'i rang sxemasi" darkThemes: "Qorong'i rang sxemasi"
syncDeviceDarkMode: "Qurilmangizning qorongi rejimi bilan sinxronlashtiring"
drive: "Disk" drive: "Disk"
fileName: "Fayl nomi" fileName: "Fayl nomi"
selectFile: "Faylni tanlang" selectFile: "Faylni tanlang"
@ -292,11 +306,14 @@ emptyDrive: "Diskingiz bo'sh"
emptyFolder: "Ushbu papka bo'sh" emptyFolder: "Ushbu papka bo'sh"
unableToDelete: "O'chirilmadi" unableToDelete: "O'chirilmadi"
inputNewFileName: "Yangi fayl nomini kiriting" inputNewFileName: "Yangi fayl nomini kiriting"
inputNewDescription: "Iltimos, yangi sarlavha kiriting."
inputNewFolderName: "Yangi papka nomini kiriting" inputNewFolderName: "Yangi papka nomini kiriting"
hasChildFilesOrFolders: "Bu papka boʻsh emas va uni oʻchirib boʻlmaydi."
copyUrl: "Bog'lamadan nusxa olish" copyUrl: "Bog'lamadan nusxa olish"
rename: "Qayta nomlash" rename: "Qayta nomlash"
avatar: "Avatar" avatar: "Avatar"
banner: "Banner" banner: "Banner"
whenServerDisconnected: "server bilan aloqa uzilganda"
disconnectedFromServer: "Server bilan ulanish uzulib qoldi" disconnectedFromServer: "Server bilan ulanish uzulib qoldi"
reload: "Yangilash" reload: "Yangilash"
doNothing: "E'tiborsiz qoldirish" doNothing: "E'tiborsiz qoldirish"
@ -327,10 +344,13 @@ registration: "Ro'yxatdan o'tish"
enableRegistration: "Ro'yxatdan o'tishni yoqing" enableRegistration: "Ro'yxatdan o'tishni yoqing"
invite: "Taklif qilish" invite: "Taklif qilish"
inMb: "Megabaytlarda" inMb: "Megabaytlarda"
iconUrl: "Ikonkaning URL manzili (masalan: favicon)"
bannerUrl: "Banner URLi"
backgroundImageUrl: "Fon rasmi URL manzili"
basicInfo: "Asosiy ma'lumot" basicInfo: "Asosiy ma'lumot"
pinnedUsers: "Qadalgan foydalanuvchilar" pinnedUsers: "Qadalgan foydalanuvchilar"
pinnedPages: "Qadalgan Sahifalar" pinnedPages: "Qadalgan Sahifalar"
pinnedNotes: "Qadanlgan qayd" pinnedNotes: "Qadalgan qayd"
hcaptcha: "hCaptcha" hcaptcha: "hCaptcha"
enableHcaptcha: "hCaptchani yoqish" enableHcaptcha: "hCaptchani yoqish"
hcaptchaSiteKey: "Sayt kaliti" hcaptchaSiteKey: "Sayt kaliti"
@ -339,13 +359,26 @@ recaptcha: "reCAPTCHA"
enableRecaptcha: "reCAPTCHA ni yoqish" enableRecaptcha: "reCAPTCHA ni yoqish"
recaptchaSiteKey: "Sayt kaliti" recaptchaSiteKey: "Sayt kaliti"
recaptchaSecretKey: "Maxfiy kalit" recaptchaSecretKey: "Maxfiy kalit"
turnstile: "Turniket"
enableTurnstile: "Turniketni yoqish"
turnstileSiteKey: "Sayt kaliti" turnstileSiteKey: "Sayt kaliti"
turnstileSecretKey: "Maxfiy kalit" turnstileSecretKey: "Maxfiy kalit"
antennas: "Antennalar" antennas: "Antennalar"
manageAntennas: "Antennalarni boshqarish" manageAntennas: "Antennalarni boshqarish"
name: "Ism" name: "Ism"
antennaSource: "Antenna manbai" antennaSource: "Antenna manbai"
silence: "Sukunat" antennaKeywords: "Kalit so'zni qabul qilish"
antennaExcludeKeywords: "Istisno qilingan kalit so'zlar"
antennaKeywordsDescription: "VA sharti uchun bo'shliqlar bilan yoki YOKI sharti uchun qator uzilishlari bilan ajrating."
notifyAntenna: "Yangi qaydlar haqida menga xabar bering"
withFileAntenna: "Faqatgina fayli bor qaydlar"
connectedTo: "Quyidagi akkountlarga ulangan"
notesAndReplies: "Qaydlar va javoblar"
silence: "Jim qilish"
silenceConfirm: "Rostdan ham ushbu foydalanuvchini jim qilmoqchimisiz?"
unsilence: "Jim qilishni bekor qilish"
popularUsers: "Mashhur foydalanuvchilar."
recentlyRegisteredUsers: "Yaqinda ro'yxatdan o'tgan foydalanuvchilar"
exploreUsersCount: "{count} ta foydalanuvchi bor" exploreUsersCount: "{count} ta foydalanuvchi bor"
popularTags: "Ommabop teglar" popularTags: "Ommabop teglar"
userList: "Ro'yxatlar" userList: "Ro'yxatlar"
@ -357,20 +390,56 @@ token: "Tasdiqlash"
totp: "Autentifikatsiya ilovasi" totp: "Autentifikatsiya ilovasi"
totpDescription: "Bir martalik parollarni kiritish uchun autentifikatsiya ilovasidan foydalaning" totpDescription: "Bir martalik parollarni kiritish uchun autentifikatsiya ilovasidan foydalaning"
moderator: "Moderator" moderator: "Moderator"
nUsersMentioned: "{n} tomonidan chop etilgan"
resetPassword: "Parolni tiklash" resetPassword: "Parolni tiklash"
share: "Yuborish" share: "Yuborish"
notFound: "Topilmadi" notFound: "Topilmadi"
uploadFolder: "Jildni yuklash" uploadFolder: "Jildni yuklash"
cacheClear: "Keshni tozalash" cacheClear: "Keshni tozalash"
markAsReadAllTalkMessages: "Barcha suhbatlarni o'qilgan deb belgilang"
help: "Yordam" help: "Yordam"
inputMessageHere: "Xabar kiriting" inputMessageHere: "Xabar kiriting"
close: "Yopish" close: "Yopish"
invites: "Taklif qilish" invites: "Taklif qilish"
members: "A'zolar" members: "A'zolar"
transfer: "topshiriq"
title: "Sarlavha" title: "Sarlavha"
text: "Matn" text: "Matn"
enable: "Yoqish" enable: "Yoqish"
next: "Keyingisi"
retype: "Qayta kiriting"
onlyOneFileCanBeAttached: "Faqat bitta faylni biriktirish mumkin"
signinRequired: "Davom etishdan oldin ro'yhatdan o'tishingiz yoki tizimga kirishingiz kerak"
invitations: "Taklif qilish" invitations: "Taklif qilish"
invitationCode: "taklif qilish kodi"
checking: "Tekshirilmoqda"
available: "Mavjud"
unavailable: "Mavjud emas"
usernameInvalidFormat: "Siz a~z, A~Z, 0~9, _ dan foydalanishingiz mumkin"
tooShort: "Juda qisqa"
tooLong: "juda uzun"
weakPassword: "Zaif parol"
normalPassword: "Oddiy parol"
strongPassword: "Kuchli parol"
passwordMatched: "Mos keldi"
passwordNotMatched: "mos kelmadi"
signinWith: "{x} bilan tizimga kirish"
signinFailed: "Tizimga kirishda xatolik yuz berdi. Iltimos, foydalanuvchi nomingiz va parolingizni tekshiring."
or: "yoki"
language: "til"
aboutX: "{x} haqida"
showNoteActionsOnlyHover: "Eslatma amallarini faqat sichqonchani olib borganda korsatish"
noHistory: "Tarix yo'q"
signinHistory: "kirish tarixi"
category: "kategoriya"
tags: "teg"
docSource: "Ushbu hujjatning manbasi"
createAccount: "Akkaunt yaratish"
existingAccount: "mavjud akkaunt"
regenerate: "regeneratsiya"
fontSize: "shrift hajmi"
limitTo: "{x} gacha"
noFollowRequests: "obuna uchun so'rov yo'q"
dashboard: "Boshqaruv paneli" dashboard: "Boshqaruv paneli"
local: "Mahalliy" local: "Mahalliy"
total: "Jami" total: "Jami"
@ -379,17 +448,47 @@ dayOverDayChanges: "Kecha bo'lgan o'zgarishlar"
appearance: "Tasgqi ko'rinish" appearance: "Tasgqi ko'rinish"
clientSettings: "Klient sozlamalari" clientSettings: "Klient sozlamalari"
accountSettings: "Profil sozlamalari" accountSettings: "Profil sozlamalari"
promotion: "rag'batlantirish"
promote: "targ'ib qilish"
numberOfDays: "kunlar soni"
hideThisNote: "bu eslatmani yashiring"
showFeaturedNotesInTimeline: "Tanlangan qaydlarni Timelineda ko'rsatish"
objectStorageBaseUrl: "Asosiy URL"
objectStorageRegion: "Mintaqa"
objectStorageUseSSL: "SSL dan foydalaning"
sounds: "Tovushlar" sounds: "Tovushlar"
sound: "ovoz" sound: "ovoz"
none: "Hechnima" none: "Hechnima"
volume: "Ovoz balandligi" volume: "Ovoz balandligi"
details: "Batafsil" details: "Batafsil"
output: "Chiqish" output: "Chiqish"
deleteAllFiles: "barcha fayllarni o'chirish"
deleteAllFilesConfirm: "Barcha fayllar oʻchirilsinmi?"
userSuspended: "Bu foydalanuvchi muzlatilgan."
userSilenced: "Ushbu foydalanuvchi jim qilingan"
yourAccountSuspendedTitle: "akkaunt muzlatilgan"
yourAccountSuspendedDescription: "Ushbu akkaunt serverning xizmat ko'rsatish shartlarini buzish kabi sabablarga ko'ra to'xtatilgan. Tafsilotlar uchun administratoringizga murojaat qiling. Iltimos, yangi akkaunt yaratmang."
tokenRevoked: "token yaroqsiz"
tokenRevokedDescription: "Kirish tokeningizni muddati tugagan. Iltimos, qaytadan kiring."
accountDeleted: "akkaunt o'chirildi"
accountDeletedDescription: "Bu akkaunt oʻchirildi."
menu: "Menyu" menu: "Menyu"
divider: "Ajratrmoq" divider: "Ajratrmoq"
addItem: "Element qo'shish" addItem: "Element qo'shish"
serviceworkerInfo: "bildirishnomalar uchun yoqilgan bo'lishi kerak."
deletedNote: "Oʻchirilgan post"
themeEditor: "Rang sxemasi muharriri" themeEditor: "Rang sxemasi muharriri"
describeFile: "sarlavha qo'shing"
enterFileDescription: "sarlavha kiriting"
author: "muallif"
leaveConfirm: "Sizda saqlanmagan oʻzgarishlar bor. Bekor qilinsinmi?"
useBlurEffectForModal: "Modal uchun xiralashtirish effektidan foydalaning"
width: "kengligi"
height: "balandligi"
large: "Katta"
small: "kichik"
enableAll: "Yoqish" enableAll: "Yoqish"
disableAll: "hammasini o'chirib qo'ying"
edit: "Tahrirlash" edit: "Tahrirlash"
email: "Email" email: "Email"
smtpHost: "Host" smtpHost: "Host"
@ -464,7 +563,7 @@ _theme:
navBg: "Yon panel foni" navBg: "Yon panel foni"
navFg: "Yon panel matni" navFg: "Yon panel matni"
mention: "Murojat" mention: "Murojat"
renote: "Qayta qaydetish" renote: "Qayta qayd etish"
divider: "Ajratrmoq" divider: "Ajratrmoq"
accentDarken: "Urg'u (Qoraytirilgan)" accentDarken: "Urg'u (Qoraytirilgan)"
accentLighten: "Urg'u (Yoritilgan)" accentLighten: "Urg'u (Yoritilgan)"
@ -473,6 +572,10 @@ _sfx:
note: "Qaydlar" note: "Qaydlar"
notification: "Xabarnomalar" notification: "Xabarnomalar"
chat: "Suhbat" chat: "Suhbat"
_ago:
minutesAgo: "{n} daqiqa oldin"
hoursAgo: "{n} soat oldin"
daysAgo: "{n} kun oldin"
_2fa: _2fa:
renewTOTPCancel: "Hozir emas" renewTOTPCancel: "Hozir emas"
_permissions: _permissions:
@ -606,7 +709,7 @@ _notification:
all: "Barchasi" all: "Barchasi"
follow: "Obuna bolish" follow: "Obuna bolish"
mention: "Murojat" mention: "Murojat"
renote: "Qayta qaydetish" renote: "Qayta qayd etish"
quote: "Iqtibos keltirish" quote: "Iqtibos keltirish"
reaction: "Reaktsiyalar" reaction: "Reaktsiyalar"
receiveFollowRequest: "Qabul qilingan kuzatuv so'rovlari" receiveFollowRequest: "Qabul qilingan kuzatuv so'rovlari"

View File

@ -28,6 +28,7 @@
"@swc/core-android-arm64": "1.3.11", "@swc/core-android-arm64": "1.3.11",
"@swc/core-darwin-arm64": "1.3.56", "@swc/core-darwin-arm64": "1.3.56",
"@swc/core-darwin-x64": "1.3.56", "@swc/core-darwin-x64": "1.3.56",
"@swc/core-freebsd-x64": "1.3.11",
"@swc/core-linux-arm-gnueabihf": "1.3.56", "@swc/core-linux-arm-gnueabihf": "1.3.56",
"@swc/core-linux-arm64-gnu": "1.3.56", "@swc/core-linux-arm64-gnu": "1.3.56",
"@swc/core-linux-arm64-musl": "1.3.56", "@swc/core-linux-arm64-musl": "1.3.56",
@ -39,18 +40,19 @@
"@tensorflow/tfjs": "4.4.0", "@tensorflow/tfjs": "4.4.0",
"@tensorflow/tfjs-node": "4.4.0", "@tensorflow/tfjs-node": "4.4.0",
"bufferutil": "^4.0.7", "bufferutil": "^4.0.7",
"slacc-android-arm-eabi": "0.0.9", "slacc-android-arm-eabi": "0.0.10",
"slacc-android-arm64": "0.0.9", "slacc-android-arm64": "0.0.10",
"slacc-darwin-arm64": "0.0.9", "slacc-darwin-arm64": "0.0.10",
"slacc-darwin-universal": "0.0.9", "slacc-darwin-universal": "0.0.10",
"slacc-darwin-x64": "0.0.9", "slacc-darwin-x64": "0.0.10",
"slacc-freebsd-x64": "0.0.9", "slacc-freebsd-x64": "0.0.10",
"slacc-linux-arm-gnueabihf": "0.0.9", "slacc-linux-arm-gnueabihf": "0.0.10",
"slacc-linux-arm64-gnu": "0.0.9", "slacc-linux-arm64-gnu": "0.0.10",
"slacc-linux-arm64-musl": "0.0.9", "slacc-linux-arm64-musl": "0.0.10",
"slacc-linux-x64-gnu": "0.0.9", "slacc-linux-x64-gnu": "0.0.10",
"slacc-win32-arm64-msvc": "0.0.9", "slacc-linux-x64-musl": "0.0.10",
"slacc-win32-x64-msvc": "0.0.9", "slacc-win32-arm64-msvc": "0.0.10",
"slacc-win32-x64-msvc": "0.0.10",
"utf-8-validate": "^6.0.3" "utf-8-validate": "^6.0.3"
}, },
"dependencies": { "dependencies": {
@ -141,7 +143,7 @@
"semver": "7.5.4", "semver": "7.5.4",
"sharp": "0.32.3", "sharp": "0.32.3",
"sharp-read-bmp": "github:misskey-dev/sharp-read-bmp", "sharp-read-bmp": "github:misskey-dev/sharp-read-bmp",
"slacc": "0.0.9", "slacc": "0.0.10",
"strict-event-emitter-types": "2.0.0", "strict-event-emitter-types": "2.0.0",
"stringz": "2.1.0", "stringz": "2.1.0",
"summaly": "github:misskey-dev/summaly", "summaly": "github:misskey-dev/summaly",

View File

@ -1,6 +1,5 @@
import * as fs from 'node:fs'; import * as fs from 'node:fs';
import * as stream from 'node:stream'; import * as stream from 'node:stream/promises';
import * as util from 'node:util';
import { Inject, Injectable } from '@nestjs/common'; import { Inject, Injectable } from '@nestjs/common';
import ipaddr from 'ipaddr.js'; import ipaddr from 'ipaddr.js';
import chalk from 'chalk'; import chalk from 'chalk';
@ -14,7 +13,6 @@ import { StatusError } from '@/misc/status-error.js';
import { LoggerService } from '@/core/LoggerService.js'; import { LoggerService } from '@/core/LoggerService.js';
import type Logger from '@/logger.js'; import type Logger from '@/logger.js';
const pipeline = util.promisify(stream.pipeline);
import { bindThis } from '@/decorators.js'; import { bindThis } from '@/decorators.js';
@Injectable() @Injectable()
@ -102,7 +100,7 @@ export class DownloadService {
}); });
try { try {
await pipeline(req, fs.createWriteStream(path)); await stream.pipeline(req, fs.createWriteStream(path));
} catch (e) { } catch (e) {
if (e instanceof Got.HTTPError) { if (e instanceof Got.HTTPError) {
throw new StatusError(`${e.response.statusCode} ${e.response.statusMessage}`, e.response.statusCode, e.response.statusMessage); throw new StatusError(`${e.response.statusCode} ${e.response.statusMessage}`, e.response.statusCode, e.response.statusMessage);
@ -129,7 +127,7 @@ export class DownloadService {
// write content at URL to temp file // write content at URL to temp file
await this.downloadUrl(url, path); await this.downloadUrl(url, path);
const text = await util.promisify(fs.readFile)(path, 'utf8'); const text = await fs.promises.readFile(path, 'utf8');
return text; return text;
} finally { } finally {

View File

@ -1,8 +1,7 @@
import * as fs from 'node:fs'; import * as fs from 'node:fs';
import * as crypto from 'node:crypto'; import * as crypto from 'node:crypto';
import { join } from 'node:path'; import { join } from 'node:path';
import * as stream from 'node:stream'; import * as stream from 'node:stream/promises';
import * as util from 'node:util';
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { FSWatcher } from 'chokidar'; import { FSWatcher } from 'chokidar';
import * as fileType from 'file-type'; import * as fileType from 'file-type';
@ -16,8 +15,6 @@ import { createTempDir } from '@/misc/create-temp.js';
import { AiService } from '@/core/AiService.js'; import { AiService } from '@/core/AiService.js';
import { bindThis } from '@/decorators.js'; import { bindThis } from '@/decorators.js';
const pipeline = util.promisify(stream.pipeline);
export type FileInfo = { export type FileInfo = {
size: number; size: number;
md5: string; md5: string;
@ -371,8 +368,7 @@ export class FileInfoService {
*/ */
@bindThis @bindThis
public async getFileSize(path: string): Promise<number> { public async getFileSize(path: string): Promise<number> {
const getStat = util.promisify(fs.stat); return (await fs.promises.stat(path)).size;
return (await getStat(path)).size;
} }
/** /**
@ -381,7 +377,7 @@ export class FileInfoService {
@bindThis @bindThis
private async calcHash(path: string): Promise<string> { private async calcHash(path: string): Promise<string> {
const hash = crypto.createHash('md5').setEncoding('hex'); const hash = crypto.createHash('md5').setEncoding('hex');
await pipeline(fs.createReadStream(path), hash); await stream.pipeline(fs.createReadStream(path), hash);
return hash.read(); return hash.read();
} }

View File

@ -1,7 +1,6 @@
import { randomUUID } from 'node:crypto'; import { randomUUID } from 'node:crypto';
import { pipeline } from 'node:stream';
import * as fs from 'node:fs'; import * as fs from 'node:fs';
import { promisify } from 'node:util'; import * as stream from 'node:stream/promises';
import { Inject, Injectable } from '@nestjs/common'; import { Inject, Injectable } from '@nestjs/common';
import { DI } from '@/di-symbols.js'; import { DI } from '@/di-symbols.js';
import { getIpHash } from '@/misc/get-ip-hash.js'; import { getIpHash } from '@/misc/get-ip-hash.js';
@ -21,8 +20,6 @@ import type { FastifyRequest, FastifyReply } from 'fastify';
import type { OnApplicationShutdown } from '@nestjs/common'; import type { OnApplicationShutdown } from '@nestjs/common';
import type { IEndpointMeta, IEndpoint } from './endpoints.js'; import type { IEndpointMeta, IEndpoint } from './endpoints.js';
const pump = promisify(pipeline);
const accessDenied = { const accessDenied = {
message: 'Access denied.', message: 'Access denied.',
code: 'ACCESS_DENIED', code: 'ACCESS_DENIED',
@ -138,7 +135,7 @@ export class ApiCallService implements OnApplicationShutdown {
} }
const [path] = await createTemp(); const [path] = await createTemp();
await pump(multipartData.file, fs.createWriteStream(path)); await stream.pipeline(multipartData.file, fs.createWriteStream(path));
const fields = {} as Record<string, unknown>; const fields = {} as Record<string, unknown>;
for (const [k, v] of Object.entries(multipartData.fields)) { for (const [k, v] of Object.entries(multipartData.fields)) {

View File

@ -5,6 +5,7 @@ import { Note } from '@/models/entities/Note.js';
import { signup, post, uploadUrl, startServer, initTestDb, api, uploadFile } from '../utils.js'; import { signup, post, uploadUrl, startServer, initTestDb, api, uploadFile } from '../utils.js';
import type { INestApplicationContext } from '@nestjs/common'; import type { INestApplicationContext } from '@nestjs/common';
import type * as misskey from 'misskey-js'; import type * as misskey from 'misskey-js';
import { MAX_NOTE_TEXT_LENGTH } from '@/const.js';
describe('Note', () => { describe('Note', () => {
let app: INestApplicationContext; let app: INestApplicationContext;
@ -164,7 +165,7 @@ describe('Note', () => {
test('文字数ぎりぎりで怒られない', async () => { test('文字数ぎりぎりで怒られない', async () => {
const post = { const post = {
text: '!'.repeat(3000), text: '!'.repeat(MAX_NOTE_TEXT_LENGTH), // 3000文字
}; };
const res = await api('/notes/create', post, alice); const res = await api('/notes/create', post, alice);
assert.strictEqual(res.status, 200); assert.strictEqual(res.status, 200);
@ -172,7 +173,7 @@ describe('Note', () => {
test('文字数オーバーで怒られる', async () => { test('文字数オーバーで怒られる', async () => {
const post = { const post = {
text: '!'.repeat(3001), text: '!'.repeat(MAX_NOTE_TEXT_LENGTH + 1), // 3001文字
}; };
const res = await api('/notes/create', post, alice); const res = await api('/notes/create', post, alice);
assert.strictEqual(res.status, 400); assert.strictEqual(res.status, 400);

View File

@ -58,7 +58,7 @@ async function getClientWidthWithCache(targetEl: HTMLElement, containerEl: HTMLE
</script> </script>
<script lang="ts" setup> <script lang="ts" setup>
import { onMounted, shallowRef } from 'vue'; import { onMounted, onUnmounted, shallowRef } from 'vue';
import * as misskey from 'misskey-js'; import * as misskey from 'misskey-js';
import PhotoSwipeLightbox from 'photoswipe/lightbox'; import PhotoSwipeLightbox from 'photoswipe/lightbox';
import PhotoSwipe from 'photoswipe'; import PhotoSwipe from 'photoswipe';
@ -82,12 +82,19 @@ const gallery = shallowRef<HTMLDivElement>();
const pswpZIndex = os.claimZIndex('middle'); const pswpZIndex = os.claimZIndex('middle');
document.documentElement.style.setProperty('--mk-pswp-root-z-index', pswpZIndex.toString()); document.documentElement.style.setProperty('--mk-pswp-root-z-index', pswpZIndex.toString());
const count = $computed(() => props.mediaList.filter(media => previewable(media)).length); const count = $computed(() => props.mediaList.filter(media => previewable(media)).length);
let lightbox: PhotoSwipeLightbox | null;
const popstateHandler = (): void => {
if (lightbox.pswp && lightbox.pswp.isOpen === true) {
lightbox.pswp.close();
}
};
/** /**
* アスペクト比をmediaListWithOneImageAppearanceに基づいていい感じに調整する * アスペクト比をmediaListWithOneImageAppearanceに基づいていい感じに調整する
* aspect-ratioではなくheightを使う * aspect-ratioではなくheightを使う
*/ */
async function calcAspectRatio() { async function calcAspectRatio() {
if (!gallery.value || !root.value) return; if (!gallery.value || !root.value) return;
let img = props.mediaList[0]; let img = props.mediaList[0];
@ -137,7 +144,7 @@ const count = $computed(() => props.mediaList.filter(media => previewable(media)
onMounted(() => { onMounted(() => {
calcAspectRatio(); calcAspectRatio();
const lightbox = new PhotoSwipeLightbox({ lightbox = new PhotoSwipeLightbox({
dataSource: props.mediaList dataSource: props.mediaList
.filter(media => { .filter(media => {
if (media.type === 'image/svg+xml') return true; // svgwebpublicpngtrue if (media.type === 'image/svg+xml') return true; // svgwebpublicpngtrue
@ -221,12 +228,7 @@ onMounted(() => {
lightbox.init(); lightbox.init();
window.addEventListener('popstate', () => { window.addEventListener('popstate', popstateHandler);
if (lightbox.pswp && lightbox.pswp.isOpen === true) {
lightbox.pswp.close();
return;
}
});
lightbox.on('beforeOpen', () => { lightbox.on('beforeOpen', () => {
history.pushState(null, '', '#pswp'); history.pushState(null, '', '#pswp');
@ -239,6 +241,12 @@ onMounted(() => {
}); });
}); });
onUnmounted(() => {
window.removeEventListener('popstate', popstateHandler);
lightbox?.destroy();
lightbox = null;
});
const previewable = (file: misskey.entities.DriveFile): boolean => { const previewable = (file: misskey.entities.DriveFile): boolean => {
if (file.type === 'image/svg+xml') return true; // svgwebpublic/thumbnailpngtrue if (file.type === 'image/svg+xml') return true; // svgwebpublic/thumbnailpngtrue
// FILE_TYPE_BROWSERSAFE // FILE_TYPE_BROWSERSAFE

View File

@ -341,6 +341,7 @@ function reply(viaKeyboard = false): void {
pleaseLogin(); pleaseLogin();
os.post({ os.post({
reply: appearNote, reply: appearNote,
channel: appearNote.channel,
animation: !viaKeyboard, animation: !viaKeyboard,
}, () => { }, () => {
focus(); focus();

View File

@ -320,6 +320,7 @@ function reply(viaKeyboard = false): void {
showMovedDialog(); showMovedDialog();
os.post({ os.post({
reply: appearNote, reply: appearNote,
channel: appearNote.channel,
animation: !viaKeyboard, animation: !viaKeyboard,
}, () => { }, () => {
focus(); focus();

View File

@ -32,7 +32,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { computed, onMounted, onUnmounted } from 'vue'; import { computed, onMounted, onUnmounted, ref } from 'vue';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import FormSection from '@/components/form/section.vue'; import FormSection from '@/components/form/section.vue';
import MkButton from '@/components/MkButton.vue'; import MkButton from '@/components/MkButton.vue';
@ -93,15 +93,6 @@ const coldDeviceStorageSaveKeys: (keyof typeof ColdDeviceStorage.default)[] = [
'darkTheme', 'darkTheme',
'syncDeviceDarkMode', 'syncDeviceDarkMode',
'plugins', 'plugins',
'mediaVolume',
'sound_masterVolume',
'sound_note',
'sound_noteMy',
'sound_notification',
'sound_chat',
'sound_chatBg',
'sound_antenna',
'sound_channel',
]; ];
const scope = ['clientPreferencesProfiles']; const scope = ['clientPreferencesProfiles'];
@ -125,18 +116,18 @@ type Profile = {
const connection = $i && useStream().useChannel('main'); const connection = $i && useStream().useChannel('main');
let profiles = $ref<Record<string, Profile> | null>(null); const profiles = ref<Record<string, Profile> | null>(null);
os.api('i/registry/get-all', { scope }) os.api('i/registry/get-all', { scope })
.then(res => { .then(res => {
profiles = res || {}; profiles.value = res || {};
}); });
function isObject(value: unknown): value is Record<string, unknown> { function isObject(value: unknown): value is Record<string, unknown> {
return value != null && typeof value === 'object' && !Array.isArray(value); return value != null && typeof value === 'object' && !Array.isArray(value);
} }
function validate(profile: unknown): void { function validate(profile: any): void {
if (!isObject(profile)) throw new Error('not an object'); if (!isObject(profile)) throw new Error('not an object');
// Check if unnecessary properties exist // Check if unnecessary properties exist
@ -147,9 +138,9 @@ function validate(profile: unknown): void {
// Check if createdAt and updatedAt is Date // Check if createdAt and updatedAt is Date
// https://zenn.dev/lollipop_onl/articles/eoz-judge-js-invalid-date // https://zenn.dev/lollipop_onl/articles/eoz-judge-js-invalid-date
if (!profile.createdAt || Number.isNaN(new Date(profile.createdAt).getTime())) throw new Error('createdAt is falsy or not Date'); if (!profile.createdAt || Number.isNaN(new Date(profile.createdAt as any).getTime())) throw new Error('createdAt is falsy or not Date');
if (profile.updatedAt) { if (profile.updatedAt) {
if (Number.isNaN(new Date(profile.updatedAt).getTime())) { if (Number.isNaN(new Date(profile.updatedAt as any).getTime())) {
throw new Error('updatedAt is not Date'); throw new Error('updatedAt is not Date');
} }
} else if (profile.updatedAt !== null) { } else if (profile.updatedAt !== null) {
@ -181,14 +172,14 @@ function getSettings(): Profile['settings'] {
} }
async function saveNew(): Promise<void> { async function saveNew(): Promise<void> {
if (!profiles) return; if (!profiles.value) return;
const { canceled, result: name } = await os.inputText({ const { canceled, result: name } = await os.inputText({
title: ts._preferencesBackups.inputName, title: ts._preferencesBackups.inputName,
}); });
if (canceled) return; if (canceled) return;
if (Object.values(profiles).some(x => x.name === name)) { if (Object.values(profiles.value).some(x => x.name === name)) {
return os.alert({ return os.alert({
title: ts._preferencesBackups.cannotSave, title: ts._preferencesBackups.cannotSave,
text: t('_preferencesBackups.nameAlreadyExists', { name }), text: t('_preferencesBackups.nameAlreadyExists', { name }),
@ -212,7 +203,7 @@ function loadFile(): void {
input.type = 'file'; input.type = 'file';
input.multiple = false; input.multiple = false;
input.onchange = async () => { input.onchange = async () => {
if (!profiles) return; if (!profiles.value) return;
if (!input.files || input.files.length === 0) return; if (!input.files || input.files.length === 0) return;
const file = input.files[0]; const file = input.files[0];
@ -233,7 +224,7 @@ function loadFile(): void {
return os.alert({ return os.alert({
type: 'error', type: 'error',
title: ts._preferencesBackups.cannotLoad, title: ts._preferencesBackups.cannotLoad,
text: err?.message, text: (err as any)?.message ?? '',
}); });
} }
@ -252,9 +243,9 @@ function loadFile(): void {
} }
async function applyProfile(id: string): Promise<void> { async function applyProfile(id: string): Promise<void> {
if (!profiles) return; if (!profiles.value) return;
const profile = profiles[id]; const profile = profiles.value[id];
const { canceled: cancel1 } = await os.confirm({ const { canceled: cancel1 } = await os.confirm({
type: 'warning', type: 'warning',
@ -312,23 +303,23 @@ async function applyProfile(id: string): Promise<void> {
} }
async function deleteProfile(id: string): Promise<void> { async function deleteProfile(id: string): Promise<void> {
if (!profiles) return; if (!profiles.value) return;
const { canceled } = await os.confirm({ const { canceled } = await os.confirm({
type: 'info', type: 'info',
title: ts.delete, title: ts.delete,
text: t('deleteAreYouSure', { x: profiles[id].name }), text: t('deleteAreYouSure', { x: profiles.value[id].name }),
}); });
if (canceled) return; if (canceled) return;
await os.apiWithDialog('i/registry/remove', { scope, key: id }); await os.apiWithDialog('i/registry/remove', { scope, key: id });
delete profiles[id]; delete profiles.value[id];
} }
async function save(id: string): Promise<void> { async function save(id: string): Promise<void> {
if (!profiles) return; if (!profiles.value) return;
const { name, createdAt } = profiles[id]; const { name, createdAt } = profiles.value[id];
const { canceled } = await os.confirm({ const { canceled } = await os.confirm({
type: 'info', type: 'info',
@ -349,25 +340,25 @@ async function save(id: string): Promise<void> {
} }
async function rename(id: string): Promise<void> { async function rename(id: string): Promise<void> {
if (!profiles) return; if (!profiles.value) return;
const { canceled: cancel1, result: name } = await os.inputText({ const { canceled: cancel1, result: name } = await os.inputText({
title: ts._preferencesBackups.inputName, title: ts._preferencesBackups.inputName,
}); });
if (cancel1 || profiles[id].name === name) return; if (cancel1 || profiles.value[id].name === name) return;
if (Object.values(profiles).some(x => x.name === name)) { if (Object.values(profiles.value).some(x => x.name === name)) {
return os.alert({ return os.alert({
title: ts._preferencesBackups.cannotSave, title: ts._preferencesBackups.cannotSave,
text: t('_preferencesBackups.nameAlreadyExists', { name }), text: t('_preferencesBackups.nameAlreadyExists', { name }),
}); });
} }
const registry = Object.assign({}, { ...profiles[id] }); const registry = Object.assign({}, { ...profiles.value[id] });
const { canceled: cancel2 } = await os.confirm({ const { canceled: cancel2 } = await os.confirm({
type: 'info', type: 'info',
title: ts._preferencesBackups.rename, title: ts.rename,
text: t('_preferencesBackups.renameConfirm', { old: registry.name, new: name }), text: t('_preferencesBackups.renameConfirm', { old: registry.name, new: name }),
}); });
if (cancel2) return; if (cancel2) return;
@ -377,7 +368,7 @@ async function rename(id: string): Promise<void> {
} }
function menu(ev: MouseEvent, profileId: string) { function menu(ev: MouseEvent, profileId: string) {
if (!profiles) return; if (!profiles.value) return;
return os.popupMenu([{ return os.popupMenu([{
text: ts._preferencesBackups.apply, text: ts._preferencesBackups.apply,
@ -387,8 +378,8 @@ function menu(ev: MouseEvent, profileId: string) {
type: 'a', type: 'a',
text: ts.download, text: ts.download,
icon: 'ti ti-download', icon: 'ti ti-download',
href: URL.createObjectURL(new Blob([JSON.stringify(profiles[profileId], null, 2)], { type: 'application/json' })), href: URL.createObjectURL(new Blob([JSON.stringify(profiles.value[profileId], null, 2)], { type: 'application/json' })),
download: `${profiles[profileId].name}.json`, download: `${profiles.value[profileId].name}.json`,
}, null, { }, null, {
text: ts.rename, text: ts.rename,
icon: 'ti ti-forms', icon: 'ti ti-forms',
@ -402,16 +393,16 @@ function menu(ev: MouseEvent, profileId: string) {
icon: 'ti ti-trash', icon: 'ti ti-trash',
action: () => deleteProfile(profileId), action: () => deleteProfile(profileId),
danger: true, danger: true,
}], ev.currentTarget ?? ev.target); }], (ev.currentTarget ?? ev.target ?? undefined) as unknown as HTMLElement | undefined);
} }
onMounted(() => { onMounted(() => {
// streaminguser storage update // streaminguser storage update
connection?.on('registryUpdated', ({ scope: recievedScope, key, value }) => { connection?.on('registryUpdated', ({ scope: recievedScope, key, value }) => {
if (!recievedScope || recievedScope.length !== scope.length || recievedScope[0] !== scope[0]) return; if (!recievedScope || recievedScope.length !== scope.length || recievedScope[0] !== scope[0]) return;
if (!profiles) return; if (!profiles.value) return;
profiles[key] = value; profiles.value[key] = value;
}); });
}); });

View File

@ -11,7 +11,6 @@ export function createAiScriptEnv(opts) {
USER_NAME: $i ? values.STR($i.name) : values.NULL, USER_NAME: $i ? values.STR($i.name) : values.NULL,
USER_USERNAME: $i ? values.STR($i.username) : values.NULL, USER_USERNAME: $i ? values.STR($i.username) : values.NULL,
CUSTOM_EMOJIS: utils.jsToVal(customEmojis.value), CUSTOM_EMOJIS: utils.jsToVal(customEmojis.value),
CURRENT_URL: values.STR(window.location.href),
'Mk:dialog': values.FN_NATIVE(async ([title, text, type]) => { 'Mk:dialog': values.FN_NATIVE(async ([title, text, type]) => {
await os.alert({ await os.alert({
type: type ? type.value : 'info', type: type ? type.value : 'info',
@ -48,5 +47,8 @@ export function createAiScriptEnv(opts) {
utils.assertString(key); utils.assertString(key);
return utils.jsToVal(JSON.parse(miLocalStorage.getItem(`aiscript:${opts.storageKey}:${key.value}`))); return utils.jsToVal(JSON.parse(miLocalStorage.getItem(`aiscript:${opts.storageKey}:${key.value}`)));
}), }),
'Mk:url': values.FN_NATIVE(() => {
return values.STR(window.location.href);
}),
}; };
} }

View File

@ -1,4 +1,4 @@
lockfileVersion: '6.1' lockfileVersion: '6.0'
settings: settings:
autoInstallPeers: true autoInstallPeers: true
@ -330,8 +330,8 @@ importers:
specifier: github:misskey-dev/sharp-read-bmp specifier: github:misskey-dev/sharp-read-bmp
version: github.com/misskey-dev/sharp-read-bmp/02d9dc189fa7df0c4bea09330be26741772dac01 version: github.com/misskey-dev/sharp-read-bmp/02d9dc189fa7df0c4bea09330be26741772dac01
slacc: slacc:
specifier: 0.0.9 specifier: 0.0.10
version: 0.0.9 version: 0.0.10
strict-event-emitter-types: strict-event-emitter-types:
specifier: 2.0.0 specifier: 2.0.0
version: 2.0.0 version: 2.0.0
@ -340,7 +340,7 @@ importers:
version: 2.1.0 version: 2.1.0
summaly: summaly:
specifier: github:misskey-dev/summaly specifier: github:misskey-dev/summaly
version: github.com/misskey-dev/summaly/77dd5654bb82280b38c1f50e51a771c33f3df503 version: github.com/misskey-dev/summaly/089a0ad8e8c780e5c088b1c528aa95c5827cbdcc
systeminformation: systeminformation:
specifier: 5.18.7 specifier: 5.18.7
version: 5.18.7 version: 5.18.7
@ -390,6 +390,9 @@ importers:
'@swc/core-darwin-x64': '@swc/core-darwin-x64':
specifier: 1.3.56 specifier: 1.3.56
version: 1.3.56 version: 1.3.56
'@swc/core-freebsd-x64':
specifier: 1.3.11
version: 1.3.11
'@swc/core-linux-arm-gnueabihf': '@swc/core-linux-arm-gnueabihf':
specifier: 1.3.56 specifier: 1.3.56
version: 1.3.56 version: 1.3.56
@ -424,41 +427,44 @@ importers:
specifier: ^4.0.7 specifier: ^4.0.7
version: 4.0.7 version: 4.0.7
slacc-android-arm-eabi: slacc-android-arm-eabi:
specifier: 0.0.9 specifier: 0.0.10
version: 0.0.9 version: 0.0.10
slacc-android-arm64: slacc-android-arm64:
specifier: 0.0.9 specifier: 0.0.10
version: 0.0.9 version: 0.0.10
slacc-darwin-arm64: slacc-darwin-arm64:
specifier: 0.0.9 specifier: 0.0.10
version: 0.0.9 version: 0.0.10
slacc-darwin-universal: slacc-darwin-universal:
specifier: 0.0.9 specifier: 0.0.10
version: 0.0.9 version: 0.0.10
slacc-darwin-x64: slacc-darwin-x64:
specifier: 0.0.9 specifier: 0.0.10
version: 0.0.9 version: 0.0.10
slacc-freebsd-x64: slacc-freebsd-x64:
specifier: 0.0.9 specifier: 0.0.10
version: 0.0.9 version: 0.0.10
slacc-linux-arm-gnueabihf: slacc-linux-arm-gnueabihf:
specifier: 0.0.9 specifier: 0.0.10
version: 0.0.9 version: 0.0.10
slacc-linux-arm64-gnu: slacc-linux-arm64-gnu:
specifier: 0.0.9 specifier: 0.0.10
version: 0.0.9 version: 0.0.10
slacc-linux-arm64-musl: slacc-linux-arm64-musl:
specifier: 0.0.9 specifier: 0.0.10
version: 0.0.9 version: 0.0.10
slacc-linux-x64-gnu: slacc-linux-x64-gnu:
specifier: 0.0.9 specifier: 0.0.10
version: 0.0.9 version: 0.0.10
slacc-linux-x64-musl:
specifier: 0.0.10
version: 0.0.10
slacc-win32-arm64-msvc: slacc-win32-arm64-msvc:
specifier: 0.0.9 specifier: 0.0.10
version: 0.0.9 version: 0.0.10
slacc-win32-x64-msvc: slacc-win32-x64-msvc:
specifier: 0.0.9 specifier: 0.0.10
version: 0.0.9 version: 0.0.10
utf-8-validate: utf-8-validate:
specifier: ^6.0.3 specifier: ^6.0.3
version: 6.0.3 version: 6.0.3
@ -955,7 +961,7 @@ importers:
version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.0.27)(@storybook/components@7.1.0)(@storybook/core-events@7.0.27)(@storybook/manager-api@7.0.27)(@storybook/preview-api@7.0.27)(@storybook/theming@7.0.27)(@storybook/types@7.0.27)(react-dom@18.2.0)(react@18.2.0) version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.0.27)(@storybook/components@7.1.0)(@storybook/core-events@7.0.27)(@storybook/manager-api@7.0.27)(@storybook/preview-api@7.0.27)(@storybook/theming@7.0.27)(@storybook/types@7.0.27)(react-dom@18.2.0)(react@18.2.0)
summaly: summaly:
specifier: github:misskey-dev/summaly specifier: github:misskey-dev/summaly
version: github.com/misskey-dev/summaly/77dd5654bb82280b38c1f50e51a771c33f3df503 version: github.com/misskey-dev/summaly/089a0ad8e8c780e5c088b1c528aa95c5827cbdcc
vite-plugin-turbosnap: vite-plugin-turbosnap:
specifier: 1.0.2 specifier: 1.0.2
version: 1.0.2 version: 1.0.2
@ -976,7 +982,7 @@ importers:
dependencies: dependencies:
'@swc/cli': '@swc/cli':
specifier: 0.1.62 specifier: 0.1.62
version: 0.1.62(@swc/core@1.3.70)(chokidar@3.5.3) version: 0.1.62(@swc/core@1.3.69)
'@swc/core': '@swc/core':
specifier: 1.3.69 specifier: 1.3.69
version: 1.3.69 version: 1.3.69
@ -7222,12 +7228,32 @@ packages:
ts-dedent: 2.2.0 ts-dedent: 2.2.0
type-fest: 2.19.0 type-fest: 2.19.0
vue: 3.3.4 vue: 3.3.4
vue-component-type-helpers: 1.8.5 vue-component-type-helpers: 1.8.6
transitivePeerDependencies: transitivePeerDependencies:
- encoding - encoding
- supports-color - supports-color
dev: true dev: true
/@swc/cli@0.1.62(@swc/core@1.3.69):
resolution: {integrity: sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==}
engines: {node: '>= 12.13'}
hasBin: true
peerDependencies:
'@swc/core': ^1.2.66
chokidar: ^3.5.1
peerDependenciesMeta:
chokidar:
optional: true
dependencies:
'@mole-inc/bin-wrapper': 8.0.1
'@swc/core': 1.3.69
commander: 7.2.0
fast-glob: 3.2.12
semver: 7.5.4
slash: 3.0.0
source-map: 0.7.4
dev: false
/@swc/cli@0.1.62(@swc/core@1.3.70)(chokidar@3.5.3): /@swc/cli@0.1.62(@swc/core@1.3.70)(chokidar@3.5.3):
resolution: {integrity: sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==} resolution: {integrity: sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==}
engines: {node: '>= 12.13'} engines: {node: '>= 12.13'}
@ -7310,6 +7336,17 @@ packages:
requiresBuild: true requiresBuild: true
optional: true optional: true
/@swc/core-freebsd-x64@1.3.11:
resolution: {integrity: sha512-02uqYktPp6WmZfZ2Crc/yIVOcgANtjo8ciHcT7yLHvz7v+S7gx1I2tyNGUFtTX5hcR2IFNGrL8Yj4DvpTABFHg==}
engines: {node: '>=10'}
cpu: [x64]
os: [freebsd]
requiresBuild: true
dependencies:
'@swc/wasm': 1.2.130
dev: false
optional: true
/@swc/core-linux-arm-gnueabihf@1.3.56: /@swc/core-linux-arm-gnueabihf@1.3.56:
resolution: {integrity: sha512-LWwPo6NnJkH01+ukqvkoNIOpMdw+Zundm4vBeicwyVrkP+mC3kwVfi03TUFpQUz3kRKdw/QEnxGTj+MouCPbtw==} resolution: {integrity: sha512-LWwPo6NnJkH01+ukqvkoNIOpMdw+Zundm4vBeicwyVrkP+mC3kwVfi03TUFpQUz3kRKdw/QEnxGTj+MouCPbtw==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -19097,8 +19134,8 @@ packages:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
dev: true dev: true
/slacc-android-arm-eabi@0.0.9: /slacc-android-arm-eabi@0.0.10:
resolution: {integrity: sha512-T5P5kJ5UwW3UMoPXqqHh9TpCnuCJDCoivoiuONDXrYPYKF8sKDPMVVg1x/KU9/m7e562x9vAMBrIyqFFbEW0Jw==} resolution: {integrity: sha512-U3dVBuM1m8rT1D/w6S4knJ/uscNwsCR+MKxSQFbgDJEh8Atv+ovuC+FMGuaBT4iOQjpMj5dWSsN3ZPjVeo3hgA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm] cpu: [arm]
os: [android] os: [android]
@ -19106,8 +19143,8 @@ packages:
dev: false dev: false
optional: true optional: true
/slacc-android-arm64@0.0.9: /slacc-android-arm64@0.0.10:
resolution: {integrity: sha512-bcKB3ukcI5wWJa2clK/5cy6a4TKp51DRkdRuFgKLG05gBj1jbH+7+8iBPojljeY28LC2frmwVHGj3vDmkFUeYg==} resolution: {integrity: sha512-guVp88sW+4j1clTSXMzyDJHG8ondVnd8/FMKXIOfzKCEwSwX3uBxsuyHqtGvXkEwyZAGsBUy13Ei/PZAwElwYA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [android] os: [android]
@ -19115,8 +19152,8 @@ packages:
dev: false dev: false
optional: true optional: true
/slacc-darwin-arm64@0.0.9: /slacc-darwin-arm64@0.0.10:
resolution: {integrity: sha512-EspX0Hj6t0Afxbsyc6rY9mTOUQQrPVtWPwwNRaljGRorPyRDDefrU1OnJXRcwcIp0oCZrRrivRYlO7lai63EMw==} resolution: {integrity: sha512-633qnOMTP7egvd5IeljAOku0tnxlBXSoCRu7HiT0yeXxN9y5Tbg2X2/FaRzstI36lClfIJ0Lavne4mOw/90z9A==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
@ -19124,16 +19161,16 @@ packages:
dev: false dev: false
optional: true optional: true
/slacc-darwin-universal@0.0.9: /slacc-darwin-universal@0.0.10:
resolution: {integrity: sha512-oQySg+9MPyKI9rwwwhmSZQkPks2/rq3k1P5HKwUgnaFZDvDtS/hpDycB3BxSDqWdD5kVA8PLCVa8pt9T5KyKfg==} resolution: {integrity: sha512-x5kEqRMTEQTi3NCufPEukWvaWqcOL+7EkP18ZCCiajcWH83jWnT8DOSGOmmLYdrXd0B7ZZcbd8GyLp3i5zu8PA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
os: [darwin] os: [darwin]
requiresBuild: true requiresBuild: true
dev: false dev: false
optional: true optional: true
/slacc-darwin-x64@0.0.9: /slacc-darwin-x64@0.0.10:
resolution: {integrity: sha512-9Xp7mVKKF2QvDiIZOBgwsDdL/+95KBiFTdbo+XtH6YKoh6zNw0aPpkA3JojsdSMYdGHUrxl8b7avhzI0USqeEg==} resolution: {integrity: sha512-5gQYboy/4T6Bj3sVXiCpM3EvF1sK/Zx1Nq5YBMUuYb2GzrIwywghHbCD6bK4JYGvNsLN7r4PC45ZUB4gVkU8yA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
@ -19141,8 +19178,8 @@ packages:
dev: false dev: false
optional: true optional: true
/slacc-freebsd-x64@0.0.9: /slacc-freebsd-x64@0.0.10:
resolution: {integrity: sha512-jRd8WmXZLU2mcxV7SN8CzZzGiwbpxtaTjLwrYMTryQZ2TFr1xd1r5mQfTN5sBiwu3tnyK5dmHnRAPy+215mOkQ==} resolution: {integrity: sha512-Jmi5YszELef/aCzYto+LwiNGhCk5mrlJfTJU/pOI91HBbrZlV+aRyIsPCcxAMg5yPsPQuyRljrDouVYrPzNmjw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
@ -19150,8 +19187,8 @@ packages:
dev: false dev: false
optional: true optional: true
/slacc-linux-arm-gnueabihf@0.0.9: /slacc-linux-arm-gnueabihf@0.0.10:
resolution: {integrity: sha512-nhP6+jgd30sq+zFxFW7fGhnPwCfCCU0l1JKk3ORGFMl7wH7ippTDd1xGapKq7N+zgdgURbyj83P3wWb2gcRZ1w==} resolution: {integrity: sha512-9lTM3DGtISQlZYSKrMuQyKCiUnHYRcy04mY6HF1ywYcQ2sqfv3bKEnrypVewepIFUtytlIGzkgpiUAk/ghYGoA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
@ -19159,8 +19196,8 @@ packages:
dev: false dev: false
optional: true optional: true
/slacc-linux-arm64-gnu@0.0.9: /slacc-linux-arm64-gnu@0.0.10:
resolution: {integrity: sha512-x7v0rDe0KNVe1Hl6/XCtkCpqdT283pyVaUmk+af0AnoesNRjYEK8DBc8i53N4nhotionHzPIZfu5gPAFkf6RhA==} resolution: {integrity: sha512-qXrNWSINXOjHRO3c9idGm8DeOAjAjG1xHY8WiplCoHWgsZf3E7V+sPhWqRUaGQEvftsJg40+cFYREBaLQhpAVQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@ -19168,8 +19205,8 @@ packages:
dev: false dev: false
optional: true optional: true
/slacc-linux-arm64-musl@0.0.9: /slacc-linux-arm64-musl@0.0.10:
resolution: {integrity: sha512-jyq/ylITHIXTQX5ZqAbi7Mn5SdRgYJi+uEoUCi5UhoXb9LjpNzhkFuY29Je3IkVIIV7AEcAxIlvjdymXdzcF5w==} resolution: {integrity: sha512-3lUX7752f6Okn54aONioaA+9M5TvifqXBAart+u2lNXEdWmmh003cVSU2Vcwg7nJ9lLHtju2DkDmKKfJjFuShA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@ -19177,8 +19214,8 @@ packages:
dev: false dev: false
optional: true optional: true
/slacc-linux-x64-gnu@0.0.9: /slacc-linux-x64-gnu@0.0.10:
resolution: {integrity: sha512-Xs/F81H7cKhlIBigFID6CJlgjy0NeDUGV1CI1MI5mSVHsVI8dUO8zXWETjo6o8krJPgfjT5Jd4tAgvUFct5hng==} resolution: {integrity: sha512-BxxvylF9zlOLRLCpiyMvKTIUpdLlpetNBJ+DSMDh5+Ggq+AmQz2NUGawmcBJw58F8nMCj9TpWLlGNWc2AuY+JQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@ -19186,8 +19223,17 @@ packages:
dev: false dev: false
optional: true optional: true
/slacc-win32-arm64-msvc@0.0.9: /slacc-linux-x64-musl@0.0.10:
resolution: {integrity: sha512-C+H0VkKbEEnRbcXRIG5rIaXlg7IZw3o1BbvqA71B8ouQRCu/dNRuH9EQsOYXWltndY42zZi8IupNIwydTUg+Mg==} resolution: {integrity: sha512-TYJi8LOtJiTFcZvka4du7bMjF9Bz1RHRwyLnScr5E5yjjgoLRrsvgSu7bxp87xH+rgJ3CdEwE3w3Ux8EiewHpA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/slacc-win32-arm64-msvc@0.0.10:
resolution: {integrity: sha512-1CHPLiDB4exzFyT5ndtJDsRRhBxNg8mGz6I6eJEMjelGkJR2KZPT9LZuby/1bS/bcVOr7zuJvGNfbEGBeHRwPQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
@ -19195,8 +19241,8 @@ packages:
dev: false dev: false
optional: true optional: true
/slacc-win32-x64-msvc@0.0.9: /slacc-win32-x64-msvc@0.0.10:
resolution: {integrity: sha512-bElMnBbeMatCtVp2/+hBS6Z+846nQImEul9nBEr4gfezHotOM6MqR6PI7UQQzGhozpgwiDg2l1ub1MdOIgYizg==} resolution: {integrity: sha512-wAXBy5yKCAzfYWjVlyPpu6PscD+j4QhCQEy0wZaVuzNyx60HpXWcTZxxVnMR730Y7tfc7cBxSI8NtRb8RguSgg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@ -19204,22 +19250,23 @@ packages:
dev: false dev: false
optional: true optional: true
/slacc@0.0.9: /slacc@0.0.10:
resolution: {integrity: sha512-BwhjD3daQB3VIx7GxkComMYrnkWuMt4YmDAueMMchblfUUBbP8EcuonJ1Bz9nqtRn1mAH2YPrrRDP95akM+ZuQ==} resolution: {integrity: sha512-2jgms2/4mLr1AMq4oloAwPdKQK9RQvgmoEpMIxvC+HeHMwCR0XxB7gr/rKo4iLOKJ6gx02mnBU0JHWcTIonpmA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
optionalDependencies: optionalDependencies:
slacc-android-arm-eabi: 0.0.9 slacc-android-arm-eabi: 0.0.10
slacc-android-arm64: 0.0.9 slacc-android-arm64: 0.0.10
slacc-darwin-arm64: 0.0.9 slacc-darwin-arm64: 0.0.10
slacc-darwin-universal: 0.0.9 slacc-darwin-universal: 0.0.10
slacc-darwin-x64: 0.0.9 slacc-darwin-x64: 0.0.10
slacc-freebsd-x64: 0.0.9 slacc-freebsd-x64: 0.0.10
slacc-linux-arm-gnueabihf: 0.0.9 slacc-linux-arm-gnueabihf: 0.0.10
slacc-linux-arm64-gnu: 0.0.9 slacc-linux-arm64-gnu: 0.0.10
slacc-linux-arm64-musl: 0.0.9 slacc-linux-arm64-musl: 0.0.10
slacc-linux-x64-gnu: 0.0.9 slacc-linux-x64-gnu: 0.0.10
slacc-win32-arm64-msvc: 0.0.9 slacc-linux-x64-musl: 0.0.10
slacc-win32-x64-msvc: 0.0.9 slacc-win32-arm64-msvc: 0.0.10
slacc-win32-x64-msvc: 0.0.10
dev: false dev: false
/slash@3.0.0: /slash@3.0.0:
@ -20982,8 +21029,8 @@ packages:
resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
/vue-component-type-helpers@1.8.5: /vue-component-type-helpers@1.8.6:
resolution: {integrity: sha512-SBNsskF7L5x604V1BN4ZzdTtWgCqo5cfl//YuBXtc3LLyPdFRqUeJn2Q+FPNmCtl23LBT2tH79M/uv13fL0MgQ==} resolution: {integrity: sha512-vKWeoKVEV51ZzoB8+UY0apMXiifbPQxWlcZlvQRDVdiOHmEkCBClWeIGbqQ8cCR9P4j+oCyLW87sraZFMz/qnA==}
dev: true dev: true
/vue-docgen-api@4.64.1(vue@3.3.4): /vue-docgen-api@4.64.1(vue@3.3.4):
@ -21585,8 +21632,8 @@ packages:
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0)
dev: true dev: true
github.com/misskey-dev/summaly/77dd5654bb82280b38c1f50e51a771c33f3df503: github.com/misskey-dev/summaly/089a0ad8e8c780e5c088b1c528aa95c5827cbdcc:
resolution: {tarball: https://codeload.github.com/misskey-dev/summaly/tar.gz/77dd5654bb82280b38c1f50e51a771c33f3df503} resolution: {tarball: https://codeload.github.com/misskey-dev/summaly/tar.gz/089a0ad8e8c780e5c088b1c528aa95c5827cbdcc}
name: summaly name: summaly
version: 4.0.2 version: 4.0.2
dependencies: dependencies: