Compare commits

...

27 Commits

Author SHA1 Message Date
かっこかり 414aff4ad9
Merge branch 'develop' into mfm-rainbow-fallback 2023-07-27 09:18:45 +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
tamaina 09f37fc9e5 fix(frontend): #11386 でウィンドウの場合に正常に表示されない問題を修正 2023-07-26 08:31:23 +00:00
syuilo 926f208fcf fix(frontend): Fix cat ears are awkward on reply modal 2023-07-26 17:24:13 +09:00
syuilo 037c2e9332 Revert "fix(frontend): Fix cat ears are awkward on reply modal (#11309)"
This reverts commit 5280a5e5c6.
2023-07-26 17:17:26 +09:00
syuilo 65cc3c5fce 13.14.2 2023-07-26 16:53:26 +09:00
syuilo e5ac864077
Update packages/frontend/src/pages/custom-emojis-manager.vue
Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2023-07-26 16:51:53 +09:00
syuilo 76018b4a1b
New Crowdin updates (#11388)
* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Uzbek)
2023-07-26 16:51:09 +09:00
tamaina bc927b8f75
perf(frontend): Reduce getting clientWidth in MkMediaImage (#11386)
* perf(frontend): Reduce getting clientWidth

* fix

* ✌️
2023-07-26 16:50:54 +09:00
woxtu dc452bf89a
Remove redundant double quotes in page titles (#11352) 2023-07-26 15:26:41 +09:00
syuilo 92337b0504 fix(frontend): 一部モーダルダイアログでスクロールできない問題を修正 2023-07-26 13:50:58 +09:00
syuilo e5fce15ba5 fix(frontend): Selecting all emojis in Custom emoji is impossible
Fix #11381
2023-07-26 10:30:52 +09:00
syuilo c59a9c6f84
New Crowdin updates (#11341)
* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Uzbek)

* New translations ja-JP.yml (Hungarian)
2023-07-26 10:20:40 +09:00
Ibuki Sugiyama 545b5cab96
fix: insert bottom spacing appropriately (#11370) 2023-07-25 19:49:52 +09:00
tamaina fe13755be8
refactor: Array.from(iterable).map(mapfn)をArray.from(iterable | { length: number }, mapfn)に (#11337)
* refactor: Array.from(iterable).map(mapfn)をArray.from(iterable, mapfn)に

* Update packages/frontend/src/components/MkTagCloud.vue

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>

---------

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2023-07-25 10:46:52 +00:00
Acid Chicken (硫酸鶏) 9208cfd5f3
fix: hide sensitive gallery image on OGP (#11380) 2023-07-25 10:45:46 +00:00
tamaina 81ba841fb8
perf(frontend): MkMediaListのアスペクト比制限を調整 (#11377) 2023-07-25 19:44:52 +09:00
Koki Takahashi 0404d9c103
fix(backend): Change isPublic to correctly recognize as:Public term (#11347)
* fix: Change isPublic to correctly recognize as:Public term

* Update CHANGELOG.md

---------

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2023-07-25 10:35:21 +00:00
tamaina c1a19ff900
fix(backend): Use OFFSET instead of SKIP when using LIMIT (#11379)
* fix(backend): Use OFFSET instead of SKIP when using LIMIT

* update CHANGELOG.md
2023-07-25 19:21:50 +09:00
hutchisr ac6a8edf0b
Use BullMQAdapter (#11367) 2023-07-25 16:32:52 +09:00
48 changed files with 2251 additions and 331 deletions

View File

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

View File

@ -2,6 +2,7 @@
_lang_: "Čeština" _lang_: "Čeština"
headlineMisskey: "Síť propojená poznámkami" headlineMisskey: "Síť propojená poznámkami"
introMisskey: "Vítejte! Misskey je otevřený a decentralizovaný microblogový servis.\n\"Poznámkami\" můžete sdílet co se zrovna děje se všemi ve Vašem okolí. 📡\nPomocí \"reakcí\" můžete sdílet své názory a pocity na ostatní poznámky. 👍\nPojďte objevovat nový svět! 🚀" introMisskey: "Vítejte! Misskey je otevřený a decentralizovaný microblogový servis.\n\"Poznámkami\" můžete sdílet co se zrovna děje se všemi ve Vašem okolí. 📡\nPomocí \"reakcí\" můžete sdílet své názory a pocity na ostatní poznámky. 👍\nPojďte objevovat nový svět! 🚀"
poweredByMisskeyDescription: "{name} je jeden ze serverů využívající open source platformu <b>Misskey<b> (nazývaná \"Misskey instance\")."
monthAndDay: "{day}. {month}." monthAndDay: "{day}. {month}."
search: "Vyhledávání" search: "Vyhledávání"
notifications: "Oznámení" notifications: "Oznámení"
@ -48,8 +49,15 @@ delete: "Smazat"
deleteAndEdit: "Smazat a upravit" deleteAndEdit: "Smazat a upravit"
deleteAndEditConfirm: "Jste si jistí že chcete smazat tuto poznámku a editovat ji? Ztratíte tím všechny reakce, sdílení a odpovědi na ni." deleteAndEditConfirm: "Jste si jistí že chcete smazat tuto poznámku a editovat ji? Ztratíte tím všechny reakce, sdílení a odpovědi na ni."
addToList: "Přidat do seznamu" addToList: "Přidat do seznamu"
addToAntenna: "Přidat do antény"
sendMessage: "Odeslat zprávu" sendMessage: "Odeslat zprávu"
copyRSS: "Kopírovat RSS"
copyUsername: "Kopírovat uživatelské jméno" copyUsername: "Kopírovat uživatelské jméno"
copyUserId: "Kopírovat ID uživatele"
copyNoteId: "Kopírovat ID poznámky"
copyFileId: "Kopírovat ID souboru"
copyFolderId: "Kopírovat ID složky"
copyProfileUrl: "Kopírovat URL profilu"
searchUser: "Vyhledat uživatele" searchUser: "Vyhledat uživatele"
reply: "Odpovědět" reply: "Odpovědět"
loadMore: "Zobrazit více" loadMore: "Zobrazit více"
@ -60,6 +68,7 @@ receiveFollowRequest: "Žádost o sledování přijata"
followRequestAccepted: "Žádost o sledování přijata" followRequestAccepted: "Žádost o sledování přijata"
mention: "Zmínění" mention: "Zmínění"
mentions: "Zmínění" mentions: "Zmínění"
directNotes: "Přímé poznámky"
importAndExport: "Import a export" importAndExport: "Import a export"
import: "Importovat" import: "Importovat"
export: "Exportovat" export: "Exportovat"
@ -82,6 +91,7 @@ error: "Chyba"
somethingHappened: "Jejda. Něco se nepovedlo." somethingHappened: "Jejda. Něco se nepovedlo."
retry: "Opakovat" retry: "Opakovat"
pageLoadError: "Nepodařilo se načíst stránku" pageLoadError: "Nepodařilo se načíst stránku"
pageLoadErrorDescription: "Tohle je obvykle způsobeno chybou sítě nebo mezipaměti prohlížeče. Zkuste vymazat mezipaměť a po chvíli čekání to zkuste znovu."
serverIsDead: "Server neodpovídá. Počkejte chvíli a zkuste to znovu." serverIsDead: "Server neodpovídá. Počkejte chvíli a zkuste to znovu."
youShouldUpgradeClient: "Pro zobrazení této stránky obnovte stránku pro aktualizaci klienta." youShouldUpgradeClient: "Pro zobrazení této stránky obnovte stránku pro aktualizaci klienta."
enterListName: "Jméno seznamu" enterListName: "Jméno seznamu"
@ -100,6 +110,8 @@ renoted: "Přeposláno"
cantRenote: "Tento příspěvek nelze přeposlat." cantRenote: "Tento příspěvek nelze přeposlat."
cantReRenote: "Odpověď nemůže být odstraněna." cantReRenote: "Odpověď nemůže být odstraněna."
quote: "Citovat" quote: "Citovat"
inChannelRenote: "Přeposlání v kanálu"
inChannelQuote: "Citace v kanálu"
pinnedNote: "Připnutá poznámka" pinnedNote: "Připnutá poznámka"
pinned: "Připnout" pinned: "Připnout"
you: "Vy" you: "Vy"
@ -108,6 +120,7 @@ sensitive: "NSFW"
add: "Přidat" add: "Přidat"
reaction: "Reakce" reaction: "Reakce"
reactions: "Reakce" reactions: "Reakce"
reactionSetting: "Reakce zobrazené ve výběru reakcí"
reactionSettingDescription2: "Přetažením změníte pořadí, kliknutím smažete, zmáčkněte \"+\" k přidání" reactionSettingDescription2: "Přetažením změníte pořadí, kliknutím smažete, zmáčkněte \"+\" k přidání"
rememberNoteVisibility: "Zapamatovat nastavení zobrazení poznámky" rememberNoteVisibility: "Zapamatovat nastavení zobrazení poznámky"
attachCancel: "Odstranit přílohu" attachCancel: "Odstranit přílohu"
@ -116,6 +129,8 @@ unmarkAsSensitive: "Odznačit jako NSFW"
enterFileName: "Zadejte název souboru" enterFileName: "Zadejte název souboru"
mute: "Ztlumit" mute: "Ztlumit"
unmute: "Odmlčet" unmute: "Odmlčet"
renoteMute: "Ztlumit poznámky"
renoteUnmute: "Zrušit ztlumení poznámek"
block: "Zablokovat" block: "Zablokovat"
unblock: "Odblokovat" unblock: "Odblokovat"
suspend: "Zmrazit" suspend: "Zmrazit"
@ -125,7 +140,10 @@ unblockConfirm: "Jste si jistí že chcete odblokovat tento účet?"
suspendConfirm: "Jste si jistí že chcete suspendovat tenhle účet?" suspendConfirm: "Jste si jistí že chcete suspendovat tenhle účet?"
unsuspendConfirm: "Jste si jistí že chcete obnovit tenhle účet?" unsuspendConfirm: "Jste si jistí že chcete obnovit tenhle účet?"
selectList: "Vybrat seznam" selectList: "Vybrat seznam"
editList: "Upravit seznam"
selectChannel: "Vybrat kanál"
selectAntenna: "Vyberte Anténu" selectAntenna: "Vyberte Anténu"
editAntenna: "Upravit anténu"
selectWidget: "Zvolte widget" selectWidget: "Zvolte widget"
editWidgets: "Upravit widget" editWidgets: "Upravit widget"
editWidgetsExit: "Hotovo" editWidgetsExit: "Hotovo"
@ -138,6 +156,8 @@ addEmoji: "Přidat emoji"
settingGuide: "Doporučené nastavení" settingGuide: "Doporučené nastavení"
cacheRemoteFiles: "Ukládání vzdálených souborů do mezipaměti" cacheRemoteFiles: "Ukládání vzdálených souborů do mezipaměti"
cacheRemoteFilesDescription: "Zakázání tohoto nastavení způsobí, že vzdálené soubory budou odkazovány přímo, místo aby byly ukládány do mezipaměti. Tím se ušetří úložiště na serveru, ale zvýší se provoz, protože se negenerují miniatury." cacheRemoteFilesDescription: "Zakázání tohoto nastavení způsobí, že vzdálené soubory budou odkazovány přímo, místo aby byly ukládány do mezipaměti. Tím se ušetří úložiště na serveru, ale zvýší se provoz, protože se negenerují miniatury."
cacheRemoteSensitiveFiles: "Uložit do mezipaměti vzdálené citlivé soubory"
cacheRemoteSensitiveFilesDescription: "Když je tohle nastavení zrušeno, tak jsou vzdálené citlivé soubory načítány přímo ze vzdálených instancí bez uložení do mezipaměti."
flagAsBot: "Tento účet je bot" flagAsBot: "Tento účet je bot"
flagAsBotDescription: "Pokud je tento účet kontrolován programem zaškrtněte tuto možnost. To označí tento účet jako bot pro ostatní vývojáře a zabrání tak nekonečným interakcím s ostatními boty a upraví Misskey systém aby se choval k tomuhle účtu jako bot." flagAsBotDescription: "Pokud je tento účet kontrolován programem zaškrtněte tuto možnost. To označí tento účet jako bot pro ostatní vývojáře a zabrání tak nekonečným interakcím s ostatními boty a upraví Misskey systém aby se choval k tomuhle účtu jako bot."
flagAsCat: "Tenhle účet je kočka" flagAsCat: "Tenhle účet je kočka"
@ -146,6 +166,7 @@ flagShowTimelineReplies: "Zobrazovat odpovědi na časové ose"
flagShowTimelineRepliesDescription: "Je-li zapnuto, zobrazí odpovědi uživatelů na poznámky jiných uživatelů na vaší časové ose." flagShowTimelineRepliesDescription: "Je-li zapnuto, zobrazí odpovědi uživatelů na poznámky jiných uživatelů na vaší časové ose."
autoAcceptFollowed: "Automaticky akceptovat následování od účtů které sledujete" autoAcceptFollowed: "Automaticky akceptovat následování od účtů které sledujete"
addAccount: "Přidat účet" addAccount: "Přidat účet"
reloadAccountsList: "Obnovit list účtů"
loginFailed: "Přihlášení se nezdařilo." loginFailed: "Přihlášení se nezdařilo."
showOnRemote: "Více na původním profilu" showOnRemote: "Více na původním profilu"
general: "Obecně" general: "Obecně"
@ -186,17 +207,26 @@ instanceInfo: "Informace o instanci"
statistics: "Statistiky" statistics: "Statistiky"
clearQueue: "Vyčistit frontu" clearQueue: "Vyčistit frontu"
clearQueueConfirmTitle: "Jste si jisti že zrušit všechny úlohy ve frontě?" clearQueueConfirmTitle: "Jste si jisti že zrušit všechny úlohy ve frontě?"
clearQueueConfirmText: "Jakékoliv nedoručené poznámky ve frontě nebudou sdružovány. Většinou tahle operace není zapotřebí."
clearCachedFiles: "Vyprázdnit mezipaměť" clearCachedFiles: "Vyprázdnit mezipaměť"
clearCachedFilesConfirm: "Jste jistí že chcete smazat všechny vzdálené soubory v mezipaměti?"
blockedInstances: "Blokované instance" blockedInstances: "Blokované instance"
blockedInstancesDescription: "Vypište názvy hostitelů instancí, které chcete blokovat odděleně řádkovými zlomky. Uvedené instance již nebudou moci s touto instancí komunikovat."
muteAndBlock: "Ztlumení a blokování"
mutedUsers: "Zltumení uživatelé"
blockedUsers: "Blokovaní uživatelé"
noUsers: "Žádní uživatelé" noUsers: "Žádní uživatelé"
editProfile: "Upravit můj profil" editProfile: "Upravit můj profil"
noteDeleteConfirm: "Jste si jistí že chcete smazat tuhle poznámku?"
pinLimitExceeded: "Nemůžete připnout další poznámky." pinLimitExceeded: "Nemůžete připnout další poznámky."
intro: "Instalace Misskey byla dokončena! Prosím vytvořte admina." intro: "Instalace Misskey byla dokončena! Prosím vytvořte admina."
done: "Hotovo" done: "Hotovo"
processing: "Zpracovávám" processing: "Zpracovávám"
preview: "Náhled" preview: "Náhled"
default: "Výchozí" default: "Výchozí"
defaultValueIs: "Základní hodnota: {value}"
noCustomEmojis: "Bez Emoji" noCustomEmojis: "Bez Emoji"
federating: "Sdružování"
blocked: "Blokováno" blocked: "Blokováno"
suspended: "Suspendováno" suspended: "Suspendováno"
all: "Vše" all: "Vše"
@ -217,6 +247,7 @@ more: "Více!"
featured: "Oblíbené poznámky" featured: "Oblíbené poznámky"
usernameOrUserId: "Uživatelské jméno nebo uživatelské id" usernameOrUserId: "Uživatelské jméno nebo uživatelské id"
noSuchUser: "Uživatel nebyl nalezen" noSuchUser: "Uživatel nebyl nalezen"
lookup: "Vyhledat"
announcements: "Oznámení" announcements: "Oznámení"
imageUrl: "URL obrázku" imageUrl: "URL obrázku"
remove: "Smazat" remove: "Smazat"
@ -227,10 +258,13 @@ resetAreYouSure: "Opravdu resetovat?"
saved: "Uloženo" saved: "Uloženo"
messaging: "Zprávy" messaging: "Zprávy"
upload: "Nahrát soubory" upload: "Nahrát soubory"
keepOriginalUploading: "Ponechat originální obrázek"
keepOriginalUploadingDescription: "Uloží původní nahraný obrázek jak je. Pokud je to vypnuté, vygeneruje se zobrazení verze na webu při nahrátí."
fromDrive: "Z disku" fromDrive: "Z disku"
fromUrl: "Z URL" fromUrl: "Z URL"
uploadFromUrl: "Nahrát z URL adresy" uploadFromUrl: "Nahrát z URL adresy"
uploadFromUrlDescription: "URL adresa souboru, který chcete nahrát" uploadFromUrlDescription: "URL adresa souboru, který chcete nahrát"
uploadFromUrlRequested: "Upload zažádán"
uploadFromUrlMayTakeTime: "Může trvat nějakou dobu, dokud nebude dokončeno nahrávání." uploadFromUrlMayTakeTime: "Může trvat nějakou dobu, dokud nebude dokončeno nahrávání."
explore: "Objevovat" explore: "Objevovat"
messageRead: "Přečtené" messageRead: "Přečtené"
@ -238,6 +272,10 @@ noMoreHistory: "To je vše"
startMessaging: "Zahájit chat" startMessaging: "Zahájit chat"
nUsersRead: "přečteno {n} uživateli" nUsersRead: "přečteno {n} uživateli"
agreeTo: "Souhlasím s {0}" agreeTo: "Souhlasím s {0}"
agree: "Souhlasím"
agreeBelow: "Souhlasím s následným"
basicNotesBeforeCreateAccount: "Důležité poznámky"
termsOfService: "Podmínky užívání"
start: "Začít" start: "Začít"
home: "Domů" home: "Domů"
remoteUserCaution: "Tyto informace nemusí být aktuální jelikož uživatel je ze vzdálené instance." remoteUserCaution: "Tyto informace nemusí být aktuální jelikož uživatel je ze vzdálené instance."
@ -268,17 +306,24 @@ createFolder: "Vytvořit složku"
renameFolder: "Přejmenovat složku" renameFolder: "Přejmenovat složku"
deleteFolder: "Odstranit složku" deleteFolder: "Odstranit složku"
addFile: "Přidat soubor" addFile: "Přidat soubor"
emptyDrive: "Váš disk je prázdný"
emptyFolder: "Tato složka je prázdná" emptyFolder: "Tato složka je prázdná"
unableToDelete: "Nelze smazat" unableToDelete: "Nelze smazat"
inputNewFileName: "Zadejte nový název" inputNewFileName: "Zadejte nový název"
inputNewDescription: "Zadejte nový popisek"
inputNewFolderName: "Zadejte název nové složky" inputNewFolderName: "Zadejte název nové složky"
circularReferenceFolder: "Koncová složka je podsložka složky, kterou chcete přesunout."
hasChildFilesOrFolders: "Nemůžete odstranit složku, která není prázdná."
copyUrl: "Kopírovat URL" copyUrl: "Kopírovat URL"
rename: "Přejmenovat" rename: "Přejmenovat"
avatar: "Avatar" avatar: "Avatar"
banner: "Baner" banner: "Baner"
displayOfSensitiveMedia: "Zobrazit citlivé média"
whenServerDisconnected: "Když ztratíte spojení se serverem"
disconnectedFromServer: "Spojení bylo přerušeno" disconnectedFromServer: "Spojení bylo přerušeno"
reload: "Aktualizovat" reload: "Aktualizovat"
doNothing: "Ignorovat" doNothing: "Ignorovat"
reloadConfirm: "Chcete obnovit časovou osu?"
watch: "Sledovat" watch: "Sledovat"
unwatch: "Přestat sledovat" unwatch: "Přestat sledovat"
accept: "Souhlasím" accept: "Souhlasím"
@ -301,15 +346,22 @@ connectService: "Připojit"
disconnectService: "Odpojit" disconnectService: "Odpojit"
enableLocalTimeline: "Povolit lokální čas" enableLocalTimeline: "Povolit lokální čas"
enableGlobalTimeline: "Povolit globální čas" enableGlobalTimeline: "Povolit globální čas"
disablingTimelinesInfo: "Administrátoři a Moderátoři budou mít stálý přístup ke všem časovým osám i přes to že nejsou zapnuté."
registration: "Registrace" registration: "Registrace"
enableRegistration: "Povolit registraci novým uživatelům" enableRegistration: "Povolit registraci novým uživatelům"
invite: "Pozvat" invite: "Pozvat"
driveCapacityPerLocalAccount: "Kapacita disku na lokálního uživatele"
driveCapacityPerRemoteAccount: "Kapacita disku na vzdáleného uživatele"
inMb: "V megabajtech" inMb: "V megabajtech"
iconUrl: "Favicon URL" iconUrl: "Favicon URL"
bannerUrl: "Baner URL" bannerUrl: "Baner URL"
backgroundImageUrl: "Adresa URL obrázku pozadí" backgroundImageUrl: "Adresa URL obrázku pozadí"
basicInfo: "Základní informace" basicInfo: "Základní informace"
pinnedUsers: "Připnutí uživatelé" pinnedUsers: "Připnutí uživatelé"
pinnedUsersDescription: "Seznam uživatelských přezdívek oddělených řádkami bude připnutý v záložce \"Objevit\"."
pinnedPages: "Připnutý stránky"
pinnedPagesDescription: "Zadejte cesty stránek oddělené řádkami, které si přejete mít přípnutý na vrcholu téhle instance."
pinnedClipId: "ID připnutého klipu"
pinnedNotes: "Připnutá poznámka" pinnedNotes: "Připnutá poznámka"
hcaptcha: "hCaptcha" hcaptcha: "hCaptcha"
enableHcaptcha: "Aktivovat hCaptchu" enableHcaptcha: "Aktivovat hCaptchu"
@ -319,30 +371,56 @@ recaptcha: "reCAPTCHA"
enableRecaptcha: "Zapnout ReCAPTCHu" enableRecaptcha: "Zapnout ReCAPTCHu"
recaptchaSiteKey: "Klíč stránky" recaptchaSiteKey: "Klíč stránky"
recaptchaSecretKey: "Tajný Klíč (Secret Key)" recaptchaSecretKey: "Tajný Klíč (Secret Key)"
turnstile: "Turnstile"
enableTurnstile: "Povolit Turnstile"
turnstileSiteKey: "Klíč stránky" turnstileSiteKey: "Klíč stránky"
turnstileSecretKey: "Tajný Klíč (Secret Key)" turnstileSecretKey: "Tajný Klíč (Secret Key)"
avoidMultiCaptchaConfirm: "Používání několik Captcha systému může způsobit konflikt mezi nimi. Chtěli byste vypnout ostatní aktivní Captcha systémy? Pokud je chcete nechat zapnuté, stiskněte zrušit."
antennas: "Antény" antennas: "Antény"
manageAntennas: "Spravovat Antény" manageAntennas: "Spravovat Antény"
name: "Jméno" name: "Jméno"
antennaSource: "Zdroj Antény" antennaSource: "Zdroj Antény"
antennaKeywords: "Klíčová slova na poslech"
antennaExcludeKeywords: "Vyloučená klíčová slova"
antennaKeywordsDescription: "Oddělte mezerami pro AND kondice nebo řádkami pro OR kondice."
notifyAntenna: "Upozornit na nové poznámky"
withFileAntenna: "Poznámky jenom se souborama"
enableServiceworker: "Povolit ServiceWorker" enableServiceworker: "Povolit ServiceWorker"
antennaUsersDescription: "Vypsat jednoho uživatele na řádek"
caseSensitive: "Rozlišuje malá a velká písmena" caseSensitive: "Rozlišuje malá a velká písmena"
withReplies: "Zahrnout odpovědi"
connectedTo: "Následující účty jsou připojeny" connectedTo: "Následující účty jsou připojeny"
notesAndReplies: "Poznámky a odpovědi" notesAndReplies: "Poznámky a odpovědi"
withFiles: "Včetně souborů" withFiles: "Včetně souborů"
silence: "Ztlumení"
silenceConfirm: "Jste si jistí že chcete ztlumit tohoto uživatele?"
unsilence: "Zrušit ztlumení"
unsilenceConfirm: "Jste jistí že chcete vrátit zltumení tohoto uživatele?"
popularUsers: "Populární uživatelé" popularUsers: "Populární uživatelé"
recentlyUpdatedUsers: "Nedávno aktívni uživatelé" recentlyUpdatedUsers: "Nedávno aktívni uživatelé"
recentlyRegisteredUsers: "Nově připojený uživatelé"
recentlyDiscoveredUsers: "Nově objevený uživatelé"
exploreUsersCount: "Existuje {count} uživatelů"
exploreFediverse: "Objevovat Fediverse"
popularTags: "Populární tagy" popularTags: "Populární tagy"
userList: "Seznamy" userList: "Seznamy"
about: "Informace" about: "Informace"
aboutMisskey: "O Misskey" aboutMisskey: "O Misskey"
administrator: "Administrátor" administrator: "Administrátor"
token: "Token" token: "Token"
2fa: "Dvoufázové ověření"
totp: "Ověřovací aplikace"
totpDescription: "Použít ověřovací aplikaci pro použití jednorázových hesel"
moderator: "Moderátor" moderator: "Moderátor"
moderation: "Moderování"
nUsersMentioned: "{n} uživatelů zmínilo" nUsersMentioned: "{n} uživatelů zmínilo"
securityKeyAndPasskey: "Bezpečnostní klíče a tokeny"
securityKey: "Bezpečnostní klíč" securityKey: "Bezpečnostní klíč"
lastUsed: "Naposledy použito" lastUsed: "Naposledy použito"
lastUsedAt: "Naposledy použito: {t}"
unregister: "Odstranit" unregister: "Odstranit"
passwordLessLogin: "Přihlášení bez hesla"
passwordLessLoginDescription: "Umožní bez-heslové přihlášení pomocí bezpečnostního klíče či tokenu"
resetPassword: "Resetovat heslo" resetPassword: "Resetovat heslo"
newPasswordIs: "Nové heslo je \"{password}\"" newPasswordIs: "Nové heslo je \"{password}\""
reduceUiAnimation: "Snížit UI animace" reduceUiAnimation: "Snížit UI animace"
@ -391,14 +469,25 @@ or: "Nebo"
language: "Jazyk" language: "Jazyk"
uiLanguage: "Jazyk uživatelského rozhraní" uiLanguage: "Jazyk uživatelského rozhraní"
aboutX: "O {x}" aboutX: "O {x}"
emojiStyle: "Styl emoji"
native: "Výchozí"
disableDrawer: "Nepoužívat šuplíkové menu"
showNoteActionsOnlyHover: "Zobrazit akce poznámky jenom při naběhnutí myši"
noHistory: "Žádná historie" noHistory: "Žádná historie"
signinHistory: "Historie přihlášení" signinHistory: "Historie přihlášení"
enableAdvancedMfm: "Zapnout pokročilé MFM"
enableAnimatedMfm: "Zapnout animované MFM"
doing: "Procesuju..."
category: "Kategorie" category: "Kategorie"
tags: "Štítky" tags: "Štítky"
docSource: "Zdroj tohoto dokumentu"
createAccount: "Vytvořit účet" createAccount: "Vytvořit účet"
existingAccount: "Existující účet" existingAccount: "Existující účet"
regenerate: "Obnovit" regenerate: "Obnovit"
fontSize: "Velikost písma" fontSize: "Velikost písma"
mediaListWithOneImageAppearance: "Výška seznamu médií s jedním obrázkem"
limitTo: "Omezeno na {x}"
noFollowRequests: "Nemáte žádné žádosti o sledování"
openImageInNewTab: "Otevřít obrázek v novém panelu" openImageInNewTab: "Otevřít obrázek v novém panelu"
dashboard: "Přehled" dashboard: "Přehled"
local: "Lokální" local: "Lokální"
@ -412,15 +501,35 @@ accountSettings: "Nastavení účtu"
promotion: "Propagace" promotion: "Propagace"
promote: "Propagovat" promote: "Propagovat"
numberOfDays: "Počet dní" numberOfDays: "Počet dní"
hideThisNote: "Skrýt tuto poznámku"
showFeaturedNotesInTimeline: "Zobrazit významné poznámky v časové ose"
objectStorage: "Úložiště objektů"
useObjectStorage: "Použít úložiště objektů"
objectStorageBaseUrl: "Base URL" objectStorageBaseUrl: "Base URL"
objectStorageBaseUrlDesc: "URL použitá jako reference. Upřesněte URL vlastní CDN nebo Proxy pokud používáte jeden z nich. Pro S3 použijte 'https://<bucket>.s3.amazonaws.com' a pro GCS nebo ekvivalentní služby použijte 'https://storage.googleapis.com/<bucket>', apd."
objectStorageBucket: "Bucket" objectStorageBucket: "Bucket"
objectStorageBucketDesc: "Prosím upřesněte název bucketu používaný poskytovatelem."
objectStoragePrefix: "Předpona" objectStoragePrefix: "Předpona"
objectStoragePrefixDesc: "Soubory budou ukládány pod složkama s tímhle prefixem."
objectStorageEndpoint: "Endpoint" objectStorageEndpoint: "Endpoint"
objectStorageEndpointDesc: "Ponechte tohle prázdné pokud používáte AWS S3, jinak upřesněte endpoint jako \"<host>\" nebo \"<host>:<port>\", podle toho jakou službu používáte."
objectStorageRegion: "Región" objectStorageRegion: "Región"
objectStorageRegionDesc: "Upřesněte region jako například \"xx-east-1\". Pokud vlastní služba nerozlišuje mezi regiony, zadejte \"us-east-1\". Zanechte prázdné pokud používáte AWS konfiguraci či proměnné veličiny."
objectStorageUseSSL: "Použít SSL" objectStorageUseSSL: "Použít SSL"
objectStorageUseSSLDesc: "Vypněte to pokud nebudete používat HTTPS pro API připojení"
objectStorageUseProxy: "Připojení skrze Proxy"
objectStorageUseProxyDesc: "Vypněte to pokud nebudete používat Proxy pro API připojení."
objectStorageSetPublicRead: "Při nahrátí nastavit na \"public-read\""
s3ForcePathStyleDesc: "Pokud je povolena funkce s3ForcePathStyle, musí být název Bucketu zahrnut do cesty k adrese URL, nikoli do názvu hostitele adresy URL. Toto nastavení může být nutné povolit při používání služeb, jako je například samostatně hostovaná instance Minio."
serverLogs: "Logy serveru"
deleteAll: "Smazat vše" deleteAll: "Smazat vše"
showFixedPostForm: "Zobrazit formulář pro nové příspěvky nad časovou osou" showFixedPostForm: "Zobrazit formulář pro nové příspěvky nad časovou osou"
showFixedPostFormInChannel: "Zobrazit vkládací formulář na vrcholu časové osy (Kanály)"
newNoteRecived: "Jsou k dispozici nové poznámky"
sounds: "Zvuky"
sound: "Zvuky"
listen: "Poslouchat" listen: "Poslouchat"
none: "Žádný"
showInPage: "Zobrazit na stránce" showInPage: "Zobrazit na stránce"
popout: "Pop-out" popout: "Pop-out"
volume: "Hlasitost" volume: "Hlasitost"
@ -433,29 +542,61 @@ install: "Nainstalovat"
uninstall: "Odinstalovat" uninstall: "Odinstalovat"
installedApps: "Autorizované aplikace" installedApps: "Autorizované aplikace"
nothing: "Nic nebylo nalezeno" nothing: "Nic nebylo nalezeno"
installedDate: "Datum autorizace"
lastUsedDate: "Poslední použití" lastUsedDate: "Poslední použití"
state: "Stav" state: "Stav"
sort: "Seřadit" sort: "Seřadit"
ascendingOrder: "Vzestupně" ascendingOrder: "Vzestupně"
descendingOrder: "Sestupně" descendingOrder: "Sestupně"
scratchpad: "Zápisník" scratchpad: "Zápisník"
scratchpadDescription: "Scratchpad poskytuje rozhraní pro AiScript experimenty. Můžete psát, spustit či zkontrolovat výsledky jeho interakce s Misskey."
output: "Výstup" output: "Výstup"
script: "Skript" script: "Skript"
disablePagesScript: "Vypnout AiScript na stránkách"
updateRemoteUser: "Aktualizovat informace o vzdáleném účtu" updateRemoteUser: "Aktualizovat informace o vzdáleném účtu"
deleteAllFiles: "Smazat všechny soubory" deleteAllFiles: "Smazat všechny soubory"
deleteAllFilesConfirm: "Jste si jistí že chcete smazat všechny soubory?" deleteAllFilesConfirm: "Jste si jistí že chcete smazat všechny soubory?"
removeAllFollowing: "Přestat sledovat všechny sledované uživatele"
removeAllFollowingDescription: "Spuštěním přestanete sledovat všechny účty z {host}. Prosíme spustěte tohle v případě že instance už neexistuje. "
userSuspended: "Tomuto uživateli byl pozastaven účet." userSuspended: "Tomuto uživateli byl pozastaven účet."
userSilenced: "Tenhle uživatel je umlčen."
yourAccountSuspendedTitle: "Tenhle účet je zmrazený"
yourAccountSuspendedDescription: "Tenhle účet byl zmrazen z důvodu porušení smluvní podmínky serveru. Pro přesnější informace kontaktujte administrátora. Prosíme nezakládejte si nový účet."
tokenRevoked: "Nesprávný token"
tokenRevokedDescription: "Tenhle token vyprchal. Prosíme přihlašte se znova."
accountDeleted: "Účet smazán"
accountDeletedDescription: "Tenhle účet byl smazán."
menu: "Menu" menu: "Menu"
divider: "Dělící čára" divider: "Dělící čára"
addItem: "Přidat položku" addItem: "Přidat položku"
rearrange: "Přeřadit"
relays: "Relay" relays: "Relay"
addRelay: "Přidat Relay" addRelay: "Přidat Relay"
inboxUrl: "Inbox URL" inboxUrl: "Inbox URL"
addedRelays: "Přidané přenosy"
serviceworkerInfo: "Musí být zapnut pro push notifikace."
deletedNote: "Odstraněné příspěvky" deletedNote: "Odstraněné příspěvky"
invisibleNote: "Skryté příspěvky" invisibleNote: "Skryté příspěvky"
enableInfiniteScroll: "Automaticky načítat více"
visibility: "Viditelnost"
poll: "Anketa"
useCw: "Schovat obsah"
enablePlayer: "Otevřít video přehrávač"
disablePlayer: "Zavřít video přehrávač"
expandTweet: "Rozbalit tweet"
themeEditor: "Editor témat"
description: "Popis" description: "Popis"
describeFile: "Přidat popisek"
enterFileDescription: "Vložit popisek"
author: "Autor" author: "Autor"
leaveConfirm: "Máte neuložené změny. Opravdu je chcete zahodit?"
manage: "Administrace" manage: "Administrace"
plugins: "Pluginy"
preferencesBackups: "Zálohy nastavení"
deck: "Deck"
undeck: "Opustit Deck"
useBlurEffectForModal: "Použít efekt rozostření na okna"
useFullReactionPicker: "Používat plnou velikost výběru emoji"
width: "Šířka" width: "Šířka"
height: "Výška" height: "Výška"
large: "Velké" large: "Velké"
@ -465,10 +606,13 @@ generateAccessToken: "Vygenerovat přístupový token"
permission: "Oprávnění" permission: "Oprávnění"
enableAll: "Povolit vše" enableAll: "Povolit vše"
disableAll: "Vypnout vše" disableAll: "Vypnout vše"
tokenRequested: "Povolit přístup k účtu"
pluginTokenRequestedDescription: "Tenhle plugin bude moct používat oprávnění nastavená zde."
notificationType: "Typy oznámení" notificationType: "Typy oznámení"
edit: "Upravit" edit: "Upravit"
emailServer: "Mailový server" emailServer: "Mailový server"
enableEmail: "Zapnout email dystribuci" enableEmail: "Zapnout email dystribuci"
emailConfigInfo: "Používá se na ověření emailové adresy během registrace nebo při zapomenutí hesla."
email: "Email" email: "Email"
emailAddress: "Emailová adresa" emailAddress: "Emailová adresa"
smtpConfig: "Konfigurace SMTP serveru" smtpConfig: "Konfigurace SMTP serveru"
@ -476,8 +620,15 @@ smtpHost: "Hostitel"
smtpPort: "Port" smtpPort: "Port"
smtpUser: "Uživatelské jméno" smtpUser: "Uživatelské jméno"
smtpPass: "Heslo" smtpPass: "Heslo"
emptyToDisableSmtpAuth: "Zanechte uživatelské jméno a heslo prázdné pro vypnutí SMTP verifikace."
smtpSecure: "Použít implicitní SSL/TLS pro SMTP připojení"
smtpSecureInfo: "Toto vypněte pokud používáte STARTTLS" smtpSecureInfo: "Toto vypněte pokud používáte STARTTLS"
testEmail: "Otestovat doručení emailů" testEmail: "Otestovat doručení emailů"
wordMute: "Ztlumené slova"
regexpError: "Chyba v regulérním výrazu"
regexpErrorDescription: "Došlo k chybě v regulérním výrazu v řádku {line} tabulky {tab} ztlumených slov:"
instanceMute: "Ztlumené instance"
userSaysSomething: "{name} řekl/a něco"
makeActive: "Aktivovat" makeActive: "Aktivovat"
display: "Zobrazit" display: "Zobrazit"
copy: "Kopírovat" copy: "Kopírovat"
@ -489,21 +640,66 @@ database: "Databáze"
channel: "Kanály" channel: "Kanály"
create: "Vytvořit" create: "Vytvořit"
notificationSetting: "Nastavení oznámení" notificationSetting: "Nastavení oznámení"
notificationSettingDesc: "Vyberte typy oznámení k zobrazení."
useGlobalSetting: "Použít globální nastavení" useGlobalSetting: "Použít globální nastavení"
useGlobalSettingDesc: "Pokud je to zapnuté, tak nastavení oznámení účtu bude použito. Pokud je to vypnuté, tak se bude moct použít jednotlivá nastavení."
other: "Ostatní" other: "Ostatní"
regenerateLoginToken: "Přegenerovat přihlašovací token"
regenerateLoginTokenDescription: "Přegeneruje token interně používaný během přihlášení. Běžně tahle akce není nutná. Pokud bude token přegenerovaný, tak se všechna přihlášená zařízení odhlásí."
setMultipleBySeparatingWithSpace: "Oddělení více položek mezerami."
fileIdOrUrl: "ID nebo URL souboru" fileIdOrUrl: "ID nebo URL souboru"
behavior: "Chování" behavior: "Chování"
sample: "Ukázka" sample: "Ukázka"
abuseReports: "Nahlášení"
reportAbuse: "Nahlášení"
reportAbuseOf: "Nahlásit {name}"
fillAbuseReportDescription: "Prosíme vyplňte všechny detaily ohledně tohodle nahlášení. Pokud jde o specifickou poznámku, prosíme o přiložení její URL."
abuseReported: "Nahlášení bylo odesláno. Děkujeme převelice."
reporter: "Nahlásil"
reporteeOrigin: "Původ nahlášení"
reporterOrigin: "Původ nahlasovače"
forwardReport: "Přeposlat nahlášení do vzdálené instance"
send: "Odeslat" send: "Odeslat"
openInNewTab: "Otevřít v nové kartě" openInNewTab: "Otevřít v nové kartě"
openInSideView: "Otevřít v bočním panelu"
defaultNavigationBehaviour: "Výchozí chování navigace"
instanceTicker: "Informace instance o poznámkách"
waitingFor: "Čeká se na {x}"
random: "Náhodně" random: "Náhodně"
system: "Systém" system: "Systém"
switchUi: "Přepnout UI"
desktop: "Plocha" desktop: "Plocha"
clip: "Oříznout" clip: "Oříznout"
createNew: "Vytvořit nový" createNew: "Vytvořit nový"
optional: "Volitelné" optional: "Volitelné"
createNewClip: "Vytvořit nový klip"
unclip: "Odepnout"
confirmToUnclipAlreadyClippedNote: "Tahle poznámku je už součásti \"{name}\" klipu. Chcete ji místo toho odepnout z tohodle klipu?"
public: "Veřejný"
i18nInfo: "Misskey je překládán do jiných jazyků dobrovolníkama. Můžete pomoci na {link}."
manageAccessTokens: "Spravovat přístupové tokeny"
accountInfo: "Informace o účtu"
notesCount: "Počet poznámek"
repliesCount: "Počet odeslaných odpovědí"
renotesCount: "Počet přeposlaných poznámek"
repliedCount: "Počet přijatých odpovědí"
renotedCount: "Počet přijatých přeposlaných poznámek"
followingCount: "Počet sledovaných účtů"
followersCount: "Počet sledujících"
sentReactionsCount: "Počet odeslaných reakcí"
receivedReactionsCount: "Počet přijatých reakcí"
pollVotesCount: "Počet odeslaných anketových hlasů"
pollVotedCount: "Počet přijatých anketových hlasů"
yes: "Ano" yes: "Ano"
no: "Ne" no: "Ne"
driveFilesCount: "Počet souborů na disku"
driveUsage: "Využití disku"
noCrawle: "Odmítat indexování crawleru"
lockedAccountInfo: "Pokud nenastavíte viditelnost poznámek na \"Pouze pro sledující\", budou poznámky viditelné všem i přesto že vyžadujete manuální potvrzení pro sledování."
alwaysMarkSensitive: "Výchozně označovat jako citlivý"
loadRawImages: "Načítat originální obrázky místo náhledů"
disableShowingAnimatedImages: "Nepřehrávat animované obrázky"
verificationEmailSent: "Ověřovací email byl zaslán. Ověření dokončíte kliknutím na odkaz v emailu."
notSet: "Není nastaveno" notSet: "Není nastaveno"
emailVerified: "Váš e-mail byl ověřen" emailVerified: "Váš e-mail byl ověřen"
contact: "Kontakt" contact: "Kontakt"

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

@ -1091,6 +1091,9 @@ usedAt: "Usada el"
unused: "Sin usar" unused: "Sin usar"
used: "Usada" used: "Usada"
expired: "Caducada" expired: "Caducada"
doYouAgree: "¿Está de acuerdo?"
beSureToReadThisAsItIsImportant: "Por favor lea esto que es importante"
iHaveReadXCarefullyAndAgree: "He leído el texto {x} y estoy de acuerdo"
_initialAccountSetting: _initialAccountSetting:
accountCreated: "¡La cuenta ha sido creada!" accountCreated: "¡La cuenta ha sido creada!"
letsStartAccountSetup: "Para empezar, creemos tu perfil." letsStartAccountSetup: "Para empezar, creemos tu perfil."

View File

@ -49,6 +49,7 @@ delete: "Supprimer"
deleteAndEdit: "Supprimer et réécrire" deleteAndEdit: "Supprimer et réécrire"
deleteAndEditConfirm: "Êtes-vous sûr·e de vouloir supprimer cette note et la reformuler ? Vous perdrez toutes les réactions, renotes et réponses y afférentes." deleteAndEditConfirm: "Êtes-vous sûr·e de vouloir supprimer cette note et la reformuler ? Vous perdrez toutes les réactions, renotes et réponses y afférentes."
addToList: "Ajouter à une liste" addToList: "Ajouter à une liste"
addToAntenna: "Ajouter à lantenne"
sendMessage: "Envoyer un message" sendMessage: "Envoyer un message"
copyRSS: "Copier le RSS" copyRSS: "Copier le RSS"
copyUsername: "Copier le nom dutilisateur·rice" copyUsername: "Copier le nom dutilisateur·rice"
@ -57,10 +58,10 @@ copyNoteId: "Copier l'identifiant de la note"
copyFileId: "Copier l'identifiant du fichier" copyFileId: "Copier l'identifiant du fichier"
copyFolderId: "Copier l'identifiant du dossier" copyFolderId: "Copier l'identifiant du dossier"
copyProfileUrl: "Copier l'URL du profil" copyProfileUrl: "Copier l'URL du profil"
searchUser: "Chercher un·e utilisateur·rice" searchUser: "Chercher un utilisateur"
reply: "Répondre" reply: "Répondre"
loadMore: "Afficher plus …" loadMore: "Afficher plus …"
showMore: "Afficher plus …" showMore: "Voir plus"
showLess: "Fermer" showLess: "Fermer"
youGotNewFollower: "Vous suit" youGotNewFollower: "Vous suit"
receiveFollowRequest: "Demande dabonnement reçue" receiveFollowRequest: "Demande dabonnement reçue"
@ -73,16 +74,16 @@ import: "Importer"
export: "Exporter" export: "Exporter"
files: "Fichiers" files: "Fichiers"
download: "Télécharger" download: "Télécharger"
driveFileDeleteConfirm: "Êtes-vous sûr·e de vouloir supprimer le fichier \"{name}\" ? Les notes liées à ce fichier seront aussi supprimées." driveFileDeleteConfirm: "Êtes-vous sûr de vouloir supprimer le fichier \"{name}\" ? Les notes liées à ce fichier seront aussi supprimées."
unfollowConfirm: "Désirez-vous vous désabonner de {name} ?" unfollowConfirm: "Désirez-vous vous désabonner de {name} ?"
exportRequested: "Vous avez demandé une exportation. Lopération pourrait prendre un peu de temps. Une terminée, le fichier résultant sera ajouté au Drive." exportRequested: "Vous avez demandé une exportation. Lopération pourrait prendre un peu de temps. Une terminée, le fichier résultant sera ajouté au Drive."
importRequested: "Vous avez initié un import. Cela pourrait prendre un peu de temps." importRequested: "Vous avez initié un import. Cela pourrait prendre un peu de temps."
lists: "Listes" lists: "Listes"
noLists: "Vous navez aucune liste" noLists: "Vous navez aucune liste"
note: "Notes" 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"
@ -121,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"

103
locales/hu-HU.yml Normal file
View File

@ -0,0 +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

@ -49,11 +49,15 @@ delete: "ほかす"
deleteAndEdit: "ほかして直す" deleteAndEdit: "ほかして直す"
deleteAndEditConfirm: "このートをほかしてもっかい直すこのートへのツッコミ、Renote、返信も全部消えるんやけどそれでもええん" deleteAndEditConfirm: "このートをほかしてもっかい直すこのートへのツッコミ、Renote、返信も全部消えるんやけどそれでもええん"
addToList: "リストに入れたる" addToList: "リストに入れたる"
addToAntenna: "アンテナに追加"
sendMessage: "メッセージを送る" sendMessage: "メッセージを送る"
copyRSS: "RSSをコピー" copyRSS: "RSSをコピー"
copyUsername: "ユーザー名をコピー" copyUsername: "ユーザー名をコピー"
copyUserId: "ユーザーIDをコピー" copyUserId: "ユーザーIDをコピー"
copyNoteId: "ートIDをコピー" copyNoteId: "ートIDをコピー"
copyFileId: "ファイルIDをコピー"
copyFolderId: "フォルダーIDをコピー"
copyProfileUrl: "プロフィールURLをコピー"
searchUser: "ユーザーを検索" searchUser: "ユーザーを検索"
reply: "返事" reply: "返事"
loadMore: "まだまだあるで!" loadMore: "まだまだあるで!"
@ -152,6 +156,8 @@ addEmoji: "絵文字を追加"
settingGuide: "ええ感じの設定" settingGuide: "ええ感じの設定"
cacheRemoteFiles: "リモートのファイルをキャッシュする" cacheRemoteFiles: "リモートのファイルをキャッシュする"
cacheRemoteFilesDescription: "この設定を切っとったら、リモートファイルをキャッシュせんと直リンクするようになるで。サーバーの容量は節約できるけど、サムネイルを作らんなるから通信量が増えるで。" cacheRemoteFilesDescription: "この設定を切っとったら、リモートファイルをキャッシュせんと直リンクするようになるで。サーバーの容量は節約できるけど、サムネイルを作らんなるから通信量が増えるで。"
cacheRemoteSensitiveFiles: "リモートのセンシティブなファイルをキャッシュする"
cacheRemoteSensitiveFilesDescription: "この設定を無効にすると、リモートのセンシティブなファイルはキャッシュせず直リンクするようになるで。"
flagAsBot: "Botにするで" flagAsBot: "Botにするで"
flagAsBotDescription: "もしこのアカウントをプログラム使うて運用するんやったら、このフラグをオンにしてや。オンにすれば、反応がバーッて連鎖せんように開発者が使うたり、Misskeyのシステム上での扱いがBotに合ったもんになるからな。" flagAsBotDescription: "もしこのアカウントをプログラム使うて運用するんやったら、このフラグをオンにしてや。オンにすれば、反応がバーッて連鎖せんように開発者が使うたり、Misskeyのシステム上での扱いがBotに合ったもんになるからな。"
flagAsCat: "Catやで" flagAsCat: "Catやで"
@ -313,6 +319,7 @@ copyUrl: "URLをコピー"
rename: "名前を変えるで" rename: "名前を変えるで"
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
displayOfSensitiveMedia: "センシティブなメディアの表示"
whenServerDisconnected: "サーバーとの接続が失くなってしもうたとき" whenServerDisconnected: "サーバーとの接続が失くなってしもうたとき"
disconnectedFromServer: "サーバーが機嫌悪いねん" disconnectedFromServer: "サーバーが機嫌悪いねん"
reload: "リロード" reload: "リロード"
@ -1067,11 +1074,26 @@ branding: "あ"
enableServerMachineStats: "サーバーのマシン情報見せびらかすで" enableServerMachineStats: "サーバーのマシン情報見せびらかすで"
enableIdenticonGeneration: "ユーザーごとのIdenticon生成を有効にする" enableIdenticonGeneration: "ユーザーごとのIdenticon生成を有効にする"
turnOffToImprovePerformance: "オフにしたらえらい軽うなるで。" turnOffToImprovePerformance: "オフにしたらえらい軽うなるで。"
createInviteCode: "招待コードを作成"
createWithOptions: "オプションを指定して作成"
createCount: "作成数"
inviteCodeCreated: "招待コード作ったで" inviteCodeCreated: "招待コード作ったで"
inviteLimitExceeded: "招待コード作りすぎやで。" inviteLimitExceeded: "招待コード作りすぎやで。"
createLimitRemaining: "作成できる招待コード: 残り {limit} 個やで" createLimitRemaining: "作成できる招待コード: 残り {limit} 個やで"
inviteLimitResetCycle: "{time}で最大 {limit} 個の招待コードを作成できるで。"
expirationDate: "有効期限"
noExpirationDate: "有効期限を設けへん"
inviteCodeUsedAt: "招待コードが使用された日時"
registeredUserUsingInviteCode: "招待コードを使用したユーザー"
waitingForMailAuth: "メール認証待ち"
inviteCodeCreator: "招待コードを作成したユーザー"
usedAt: "使用日時"
unused: "つこてへん" unused: "つこてへん"
used: "もうつこてる" used: "もうつこてる"
expired: "期限切れ"
doYouAgree: "同意するんか?"
beSureToReadThisAsItIsImportant: "重要やから絶対読んでや。"
iHaveReadXCarefullyAndAgree: "「{x}」の内容をよう読んで、同意するで。"
_initialAccountSetting: _initialAccountSetting:
accountCreated: "アカウント作り終わったで。" accountCreated: "アカウント作り終わったで。"
letsStartAccountSetup: "アカウントの初期設定をしよか。" letsStartAccountSetup: "アカウントの初期設定をしよか。"
@ -1382,6 +1404,9 @@ _role:
ltlAvailable: "ローカルタイムラインの閲覧" ltlAvailable: "ローカルタイムラインの閲覧"
canPublicNote: "パブリック投稿の許可" canPublicNote: "パブリック投稿の許可"
canInvite: "サーバー招待コードの発行" canInvite: "サーバー招待コードの発行"
inviteLimit: "招待コードの作成可能数"
inviteLimitCycle: "招待コードの発行間隔"
inviteExpirationTime: "招待コードの有効期限"
canManageCustomEmojis: "カスタム絵文字の管理" canManageCustomEmojis: "カスタム絵文字の管理"
driveCapacity: "ドライブ容量" driveCapacity: "ドライブ容量"
alwaysMarkNsfw: "勝手にファイルにNSFWをくっつける" alwaysMarkNsfw: "勝手にファイルにNSFWをくっつける"
@ -1444,6 +1469,7 @@ _ad:
back: "戻る" back: "戻る"
reduceFrequencyOfThisAd: "この広告の表示頻度を下げるで" reduceFrequencyOfThisAd: "この広告の表示頻度を下げるで"
hide: "表示せん" hide: "表示せん"
timezoneinfo: "曜日はサーバーのタイムゾーンを元に指定されるで。"
_forgotPassword: _forgotPassword:
enterEmail: "アカウントに登録したメールアドレスをここに入力してや。そのアドレス宛に、パスワードリセット用のリンクが送られるから待っててな~。" enterEmail: "アカウントに登録したメールアドレスをここに入力してや。そのアドレス宛に、パスワードリセット用のリンクが送られるから待っててな~。"
ifNoEmail: "メールアドレスを登録してへんのやったら、管理者まで教えてな~。" ifNoEmail: "メールアドレスを登録してへんのやったら、管理者まで教えてな~。"
@ -1973,6 +1999,7 @@ _deck:
introduction: "カラムを組み合わせて自分だけのインターフェイスを作りましょ!" introduction: "カラムを組み合わせて自分だけのインターフェイスを作りましょ!"
introduction2: "画面の右にある + を押して、いつでもカラムを追加できるで。" introduction2: "画面の右にある + を押して、いつでもカラムを追加できるで。"
widgetsIntroduction: "カラムのメニューから、「ウィジェットの編集」を選んでウィジェットを追加してなー" widgetsIntroduction: "カラムのメニューから、「ウィジェットの編集」を選んでウィジェットを追加してなー"
useSimpleUiForNonRootPages: "非ルートページは簡易UIで表示"
_columns: _columns:
main: "メイン" main: "メイン"
widgets: "ウィジェット" widgets: "ウィジェット"

File diff suppressed because it is too large Load Diff

View File

@ -49,6 +49,7 @@ delete: "Удалить"
deleteAndEdit: "Удалить и отредактировать" deleteAndEdit: "Удалить и отредактировать"
deleteAndEditConfirm: "Удалить эту заметку и создать отредактированную? Все реакции, ссылки и ответы на существующую будут будут потеряны." deleteAndEditConfirm: "Удалить эту заметку и создать отредактированную? Все реакции, ссылки и ответы на существующую будут будут потеряны."
addToList: "Добавить в список" addToList: "Добавить в список"
addToAntenna: "Добавить к антенне"
sendMessage: "Отправить сообщение" sendMessage: "Отправить сообщение"
copyRSS: "Скопировать RSS" copyRSS: "Скопировать RSS"
copyUsername: "Скопировать имя пользователя" copyUsername: "Скопировать имя пользователя"
@ -155,6 +156,8 @@ addEmoji: "Добавить эмодзи"
settingGuide: "Рекомендуемые настройки" settingGuide: "Рекомендуемые настройки"
cacheRemoteFiles: "Кешировать внешние файлы" cacheRemoteFiles: "Кешировать внешние файлы"
cacheRemoteFilesDescription: "Когда эта настройка отключена, файлы с других сайтов будут загружаться прямо оттуда. Это сэкономит место на сервере, но увеличит трафик, так как не будут создаваться эскизы." cacheRemoteFilesDescription: "Когда эта настройка отключена, файлы с других сайтов будут загружаться прямо оттуда. Это сэкономит место на сервере, но увеличит трафик, так как не будут создаваться эскизы."
cacheRemoteSensitiveFiles: "Кешировать внешние файлы"
cacheRemoteSensitiveFilesDescription: "Описание удаленных внешних файлов в кэше"
flagAsBot: "Аккаунт бота" flagAsBot: "Аккаунт бота"
flagAsBotDescription: "Включите, если этот аккаунт управляется программой. Это позволит системе Misskey учитывать это, а также поможет разработчикам других ботов предотвратить бесконечные циклы взаимодействия." flagAsBotDescription: "Включите, если этот аккаунт управляется программой. Это позволит системе Misskey учитывать это, а также поможет разработчикам других ботов предотвратить бесконечные циклы взаимодействия."
flagAsCat: "Аккаунт кота" flagAsCat: "Аккаунт кота"
@ -316,6 +319,7 @@ copyUrl: "Копировать ссылку"
rename: "Переименовать" rename: "Переименовать"
avatar: "Аватар" avatar: "Аватар"
banner: "Шапка" banner: "Шапка"
displayOfSensitiveMedia: "Определение деликатного контента"
whenServerDisconnected: "Когда соединение с сервером потеряно" whenServerDisconnected: "Когда соединение с сервером потеряно"
disconnectedFromServer: "Разорвано соединение с сервером" disconnectedFromServer: "Разорвано соединение с сервером"
reload: "Перезагрузить" reload: "Перезагрузить"
@ -840,6 +844,8 @@ breakFollow: "Отписка"
breakFollowConfirm: "Удалить из подписок пользователя ?" breakFollowConfirm: "Удалить из подписок пользователя ?"
itsOn: "Включено" itsOn: "Включено"
itsOff: "Выключено" itsOff: "Выключено"
on: "Вкл"
off: "Выкл"
emailRequiredForSignup: "Для регистрации учётной записи нужен адрес электронной почты" emailRequiredForSignup: "Для регистрации учётной записи нужен адрес электронной почты"
unread: "Непрочитанное" unread: "Непрочитанное"
filter: "Фильтры" filter: "Фильтры"
@ -994,6 +1000,7 @@ cannotBeChangedLater: "Это нельзя изменить позже"
reactionAcceptance: "Принятие реакций" reactionAcceptance: "Принятие реакций"
likeOnly: "Только лайки" likeOnly: "Только лайки"
likeOnlyForRemote: "Только лайки с удалённых серверов" likeOnlyForRemote: "Только лайки с удалённых серверов"
nonSensitiveOnly: "Безопасный серфинг"
rolesAssignedToMe: "Мои роли" rolesAssignedToMe: "Мои роли"
resetPasswordConfirm: "Сбросить пароль?" resetPasswordConfirm: "Сбросить пароль?"
sensitiveWords: "Чувствительные слова" sensitiveWords: "Чувствительные слова"
@ -1014,7 +1021,15 @@ noteIdOrUrl: "ID или ссылка на заметку"
video: "Видео" video: "Видео"
videos: "Видео" videos: "Видео"
dataSaver: "Экономия трафика" dataSaver: "Экономия трафика"
accountMigration: "Перенести учётную запись"
accountMoved: "Учетная запись перенесена"
operationForbidden: "Эта операция невозможна."
addMemo: "Добавить заметку"
editMemo: "Редактировать заметку"
reactionsList: "Реакции"
renotesList: "Репосты" renotesList: "Репосты"
notificationDisplay: "Отображение уведомления"
leftTop: "Верхний левый угол"
horizontal: "Сбоку" horizontal: "Сбоку"
youFollowing: "Подписки" youFollowing: "Подписки"
options: "Настройки ролей" options: "Настройки ролей"

View File

@ -98,7 +98,7 @@ enterListName: "ใส่ชื่อสำหรับรายการลิ
privacy: "ความเป็นส่วนตัว" privacy: "ความเป็นส่วนตัว"
makeFollowManuallyApprove: "ติดตามคำขอที่ต้องได้รับการอนุมัติ" makeFollowManuallyApprove: "ติดตามคำขอที่ต้องได้รับการอนุมัติ"
defaultNoteVisibility: "การมองเห็นที่เป็นค่าเริ่มต้น" defaultNoteVisibility: "การมองเห็นที่เป็นค่าเริ่มต้น"
follow: "กำลังติดตาม" follow: "ติดตาม"
followRequest: "ส่งคำขอติดตาม" followRequest: "ส่งคำขอติดตาม"
followRequests: "ส่งคำขอติดตาม" followRequests: "ส่งคำขอติดตาม"
unfollow: "เลิกติดตาม" unfollow: "เลิกติดตาม"
@ -183,7 +183,7 @@ selectUser: "เลือกผู้ใช้งาน"
recipient: "ผู้รับ" recipient: "ผู้รับ"
annotation: "ความคิดเห็น" annotation: "ความคิดเห็น"
federation: "เฟดิเวิร์ส" federation: "เฟดิเวิร์ส"
instances: "ตัวอย่าง" instances: "Server"
registeredAt: "จดทะเบียนที่" registeredAt: "จดทะเบียนที่"
latestRequestReceivedAt: "ได้รับคำขอล่าสุดไปแล้ว" latestRequestReceivedAt: "ได้รับคำขอล่าสุดไปแล้ว"
latestStatus: "สถานะล่าสุด" latestStatus: "สถานะล่าสุด"
@ -1091,6 +1091,9 @@ usedAt: "ใช้แล้วที่"
unused: "ไม่ใช้แล้ว" unused: "ไม่ใช้แล้ว"
used: "ใช้แล้ว" used: "ใช้แล้ว"
expired: "หมดอายุแล้ว" expired: "หมดอายุแล้ว"
doYouAgree: "ยอมรับมั้ย?"
beSureToReadThisAsItIsImportant: "กรุณาอ่านข้อมูลที่สำคัญอันนี้"
iHaveReadXCarefullyAndAgree: "ฉันได้อ่านข้อความ \"{x}\" และยินยอม"
_initialAccountSetting: _initialAccountSetting:
accountCreated: "คุณได้สร้างบัญชีของคุณสำเร็จเรียบร้อยแล้ว!" accountCreated: "คุณได้สร้างบัญชีของคุณสำเร็จเรียบร้อยแล้ว!"
letsStartAccountSetup: "สำหรับผู้เริ่มต้นมาตั้งค่าโปรไฟล์ของคุณกันเถอะ" letsStartAccountSetup: "สำหรับผู้เริ่มต้นมาตั้งค่าโปรไฟล์ของคุณกันเถอะ"

736
locales/uz-UZ.yml Normal file
View File

@ -0,0 +1,736 @@
---
_lang_: "O'zbek tili"
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 bildiring. 👍\nQani, yangi dunyoni kashf qilaylik! 🚀"
poweredByMisskeyDescription: "{name} ochiq manbali <b>Misskey</b>(\"Misskey instance\" deb ataladi) platformasi tomonidan qurilgan servislardan biri. "
monthAndDay: "{day}/{month}"
search: "Izlash"
notifications: "Xabarnomalar"
username: "Foydalanuvchi nomi"
password: "Parol"
forgotPassword: "Parolni unutib qo'ydim"
fetchingAsApObject: "Fediversedan olib kelinmoqda..."
ok: "Ho'p"
gotIt: "Tushunarli!"
cancel: "Bekor qilish"
noThankYou: "Hozir emas"
enterUsername: "Foydalanuvchini nomini kiriting"
renotedBy: "{user} tomonidan qayta qayd etildi"
noNotes: "Qaydlar mavjud emas"
noNotifications: "Xabarlar mavjud emas"
instance: "Server"
settings: "Sozlamalar"
notificationSettings: "Xabarnoma sozlamalari"
basicSettings: "Asosiy sozlamalar"
otherSettings: "Qoshimcha sozlamalar"
openInWindow: "Yangi oynada ochish"
profile: "Profil"
timeline: "Xronologiya"
noAccountDescription: "Ushbu foydalanuvchi hali o'zi haqida ma'lumot yozmagan."
login: "Kirish"
loggingIn: "Kirilmoqda"
logout: "Chiqish"
signup: "Ro'yxatdan o'tish"
uploading: "Yuklanmoqda..."
save: "Saqlash"
users: "Foydalanuvchilar"
addUser: "Foydalanuvchi qo'shish"
favorite: "Sevimli"
favorites: "Sevimlilar"
unfavorite: "Sevimlidan chiqarish"
favorited: "sevimli"
alreadyFavorited: "allaqachon sevimlilar orasida"
cantFavorite: "sevimlilarga qo'shib bo'lmadi"
pin: "Profilga qadab qo'yish"
unpin: "Profildan olib tashlash"
copyContent: "kontentni nusxalash"
copyLink: "Havolani nuxalash"
delete: "O'chirib tashlash"
deleteAndEdit: "O'chirish va tahrirlash"
deleteAndEditConfirm: "O'chirib, tahrirlamoqchiligingizga ishonchingiz komilmi? Siz bu qaydga tegishli barcha reaktsiyalar va javoblarni yo'qotasiz."
addToList: "Royxatga qoshish"
addToAntenna: "Antennaga qo'shish"
sendMessage: "Xabar yuborish"
copyRSS: "RSS'ni nusxalash"
copyUsername: "Foydalanuvchi nomini nusxalash"
copyUserId: "Foydalanuvchi IDsini nusxalash"
copyNoteId: "Qayd IDsini ko'chirish"
copyFileId: "Fayl ID raqamini nusxalash"
copyFolderId: "Jild ID raqamini nusxalash"
copyProfileUrl: "Profil manzilini nusxalash"
searchUser: "Foydalanuvchini izlash"
reply: "Javob berish"
loadMore: "Koproq korish"
showMore: "Koproq korish"
showLess: "Yopish"
youGotNewFollower: "sizga obuna bo'ldi"
receiveFollowRequest: "Obuna bo'lishga ruxsat qabul qilindi"
followRequestAccepted: "Obuna bo'lishga ruxsat berildi"
mention: "Murojat"
mentions: "Eslatib o'tish"
directNotes: "Bevosita qaydlar"
importAndExport: "Import/eksport"
import: "Import"
export: "Eksport"
files: "Fayllar"
download: "Yuklab olish"
driveFileDeleteConfirm: "\"{name}\" o'chirib tashlamoqchimisiz? Ushbu fayldan foydalanadigan har qanday kontent ham oʻchiriladi."
unfollowConfirm: "{name}ga obunani bekor qilmoqchimisiz?"
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."
lists: "Ro'yxatlar"
noLists: "Hech qanday ro'yxatlar mavjud emas"
note: "Qayd"
notes: "Qaydlar"
following: "Obuna bolish"
followers: "Obunachilar"
followsYou: "Sizning obunachingiz."
createList: "Ro'yxat yaratish"
manageLists: "Ro'yxatlarni boshqarish."
error: "Xato"
somethingHappened: "Xatolik yuz berdi"
retry: "Qayta urinib ko'rish"
pageLoadError: "Sahifani yuklayotganda xatolik yuz berdi"
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"
youShouldUpgradeClient: "Iltimos, ushbu sahifani ko'rish uchun sahifani yangilang."
enterListName: "Ro'yxatga nom kiriting"
privacy: "Maxfiylik"
makeFollowManuallyApprove: "Yopiq akkaunt"
defaultNoteVisibility: "Standart ko'rinish"
follow: "Obuna bolish"
followRequest: "Obuna bo'lish uchun ruxsat olish"
followRequests: "Obuna bo'lmoqchilar"
unfollow: "obunani bekor qilish"
followRequestPending: "obuna bo'lishga ruxsat kutilmoqda"
enterEmoji: "Emojini kiriting"
renote: "Qayta qayd etish"
unrenote: "Qayta qayd etishni bekor qilish"
renoted: "Qayta qayd etildi"
cantRenote: "Qayta qayd etish mumkin emas"
cantReRenote: "Repostni qayta joylashtirish mumkin emas."
quote: "Iqtibos keltirish"
inChannelRenote: "Faqat kanalga qayta qayd etish"
inChannelQuote: "Kanaldagi eslatmalar"
pinnedNote: "Qadalgan qayd"
pinned: "Profilga qadab qo'yish"
you: "Siz"
clickToShow: "Ko'rsatish uchun bosing"
sensitive: "Sezuvchan"
add: "Qo'shish"
reaction: "Reaktsiyalar"
reactions: "Reaktsiyalar"
reactionSetting: "Reaksiyalar ro'yxati"
reactionSettingDescription2: "Qayta tartiblash uchun ushlab turib siljiting, oʻchirish uchun bosing, qoʻshish uchun “+” tugmasini bosing."
rememberNoteVisibility: "Qaydning ko'rinish sozlamarini eslab qolish"
attachCancel: "Qo'shimchani olib tashlash"
markAsSensitive: "\"Hamma ko'rishi mumkin emas\" deb belgilash"
unmarkAsSensitive: "\"Hamma ko'rishi mumkin\" deb belgilash"
enterFileName: "Fayl nomini kiriting"
mute: "Ovozni ochirish"
unmute: "Ovozni yoqish"
renoteMute: "Qayta qaydlarni ovozini o'chirish"
renoteUnmute: "Qayta qaydlarni ovozini yoqish"
block: "Bloklash"
unblock: "Blokdan chiqarish"
suspend: "To'xtatish"
unsuspend: "Blokdan chiqarish"
blockConfirm: "Haqiqatdan ham quyidagi hisobni bloklashni xohlaysizmi? "
unblockConfirm: "Haqiqatdan ham quyidagi hisobni blokdan chiqarishni xohlaysizmi? "
suspendConfirm: "Bu hisobni toxtatib qoymoqchi ekanligingizga ishonchingiz komilmi?"
unsuspendConfirm: "Tasdiqlashni to'xtatib turish"
selectList: "Ro'yxat tanlash"
editList: "Roʻyxatni tahrirlash"
selectChannel: "Kanalni tanlang"
selectAntenna: "Antennani tanlang"
editAntenna: "Antennani tahrirlang"
selectWidget: "Vidjet tanlash"
editWidgets: "Vidjetni tahrirlash"
editWidgetsExit: "Tugadi"
customEmojis: "Maxsus emoji"
emoji: "Emoji"
emojis: "Emoji"
emojiName: "Emoji nomi"
emojiUrl: "Emoji URL'i"
addEmoji: "Emoji qo'shish"
settingGuide: "Tavsiya qilingan sozlamalar"
cacheRemoteFiles: "Tashqi fayllarni keshlash"
cacheRemoteFilesDescription: "Ushbu sozlama o'chirilgan bo'lsa tashqi fayllar bevosita tashqi serverdan yuklanadi. Buni o'chirish ombor ishlatilishini kamaytiradi, lekin traffikni ko'paytiradi, chunki eskizlar generatsiya qilinmaydi."
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."
flagAsBot: "Ushbu akkauntni bot sifatida belgilash"
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"
flagAsCatDescription: "Ushbu akkauntni mushuk sifatida belgilash uchun ushbu sozlamani yoqing."
flagShowTimelineReplies: "Javoblarni xronogoliya bo'yicha ko'rsatish"
flagShowTimelineRepliesDescription: "Bu parametr yoqilganda, lentada foydalanuvchi xabarlariga javob berilgan xabarlar ham ko'rinadi"
autoAcceptFollowed: "Obunachilarni avtomatik ravishda qabul qilish"
addAccount: "Akkaunt qo'shish"
reloadAccountsList: "Hisoblar ro'yxatini yangilash"
loginFailed: "Tizimga kirishda xatolik yuz berdi"
showOnRemote: "Masofaviy boshqaruvni ko'rish"
general: "Asosiy"
wallpaper: "Fon rasmi"
setWallpaper: "Fon rasmini o'rnatish"
removeWallpaper: "Fon rasmini olib tashlash"
searchWith: "Izlash: {q}"
youHaveNoLists: "Sizda hech qanday ro'yxatlar mavjud emas"
followConfirm: "{name} ga obuna bo'lmoqchimisiz?"
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"
selectUser: "Foydalanuvchini tanlang"
recipient: "Qabul qiluvchi"
annotation: "Izohlar"
federation: "Federatsiya"
instances: "Serverlar"
registeredAt: "Ro'yhatdan o'tgan"
latestRequestReceivedAt: "Oxirgi qabul qilingan so'rov"
latestStatus: "So'nggi holat"
storageUsage: "Ishlatilgan xotira"
charts: "Diagrammalar"
perHour: "Soatbay"
perDay: "Kunbay"
stopActivityDelivery: "Faollikni jo'natishi to'xtatish"
blockThisInstance: "Ko;rsatilgan serverni bloklash"
operations: "Amallar"
software: "Dastur"
version: "Versiya"
metadata: "Meta ma'lumot"
withNFiles: "{n} ta fayl(lar)"
monitor: "Kuzatish"
jobQueue: "Vazifalar navbati"
cpuAndMemory: "CPU va Xotira"
network: "Tarmoq"
disk: "Disk"
instanceInfo: "Instans haqida ma'lumot"
statistics: "Statistika"
clearQueue: "Navbatni tozalash"
clearQueueConfirmTitle: "Navbatni tozalamoqchimisiz?"
clearQueueConfirmText: "Yetkazib berilmagan xabarlar yetkazilmaydi. Odatda buni qilish shart emas."
clearCachedFiles: "Keshni tozalash"
clearCachedFilesConfirm: "Barcha keshlangan masofaviy fayllar oʻchirilsinmi?"
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"
mutedUsers: "Ovozsiz foydalanuvchilar"
blockedUsers: "Bloklangan foydalanuvchilar"
noUsers: "Foydalanuvchilar yoq"
editProfile: "Profilni o'zgartirish"
noteDeleteConfirm: "Haqiqatan ham bu qaydni oʻchirib tashlamoqchimisiz?"
pinLimitExceeded: "Siz boshqa qaydlarni mahkamlay olmaysiz"
intro: "Misskeyni o'rnatish tugallandi! Iltimos, administrator foydalanuvchi yarating."
done: "Bajarildi"
processing: "Amaliyotda"
preview: "Ko'rish"
default: "Odatiy"
defaultValueIs: "Sukut bo'yicha: {value}"
noCustomEmojis: "Emojilar mavjud emas"
noJobs: "Vazifalar yo'q"
federating: "Ittifoqdosh"
blocked: "Bloklangan"
suspended: "To'xtatilgan"
all: "Barcha"
subscribing: "Obuna bo'lish"
publishing: "Yuborilmoqda"
notResponding: "Javob bermayapti"
instanceFollowing: "server obuna bo'ladi"
instanceFollowers: "server obunachisi"
instanceUsers: "server foydalanuvchisi"
changePassword: "Parolni ozgartirish"
security: "Xavfsizlik"
retypedNotMatch: "Maydonlar mos kelmayapti"
currentPassword: "Joriy parol"
newPassword: "Yangi parol"
newPasswordRetype: "Yangi parolni boshqatdan tering"
attachFile: "Fayl biriktirish"
more: "Ko'proq!"
featured: "ta'kidlash"
noSuchUser: "Foydalanuvchi topilmadi"
lookup: "So'rov"
announcements: "Bildirishnomalar"
imageUrl: "Rasm URL"
remove: "O'chirib tashlash"
removed: "Muvaffaqiyatli o'chirildi"
removeAreYouSure: "“{x}”ni olib tashlamoqchi ekanligingizga ishonchingiz komilmi?"
deleteAreYouSure: "“{x}”ni chindan ham yo'q qilmoqchimisiz?"
resetAreYouSure: "Haqiqatan ham qayta tiklansinmi?"
saved: "Saqlandi"
messaging: "Suhbat"
upload: "Yuklash"
keepOriginalUploading: "Asl rasmni saqlang"
fromUrl: "URL dan"
uploadFromUrlDescription: "Yuklamoqchi bo'lgan faylingizga havola"
uploadFromUrlRequested: "yuklab olish so'ralgan"
uploadFromUrlMayTakeTime: "Yuklash tugallanishi uchun biroz vaqt ketishi mumkin."
explore: "Ko'rib chiqish"
messageRead: "Oqildi"
noMoreHistory: "Buning ortida hech qanday hikoya yo'q"
startMessaging: "Yangi suhbatni boshlash"
nUsersRead: "{n} tomonidan o'qildi"
agreeTo: "Men {0} ga roziman"
agree: "Rozi bo'lish"
agreeBelow: "Men quyidagilarga roziman"
basicNotesBeforeCreateAccount: "Muhim qaydlar"
termsOfService: "Foydalanish shartlari"
start: "Boshlash"
home: "Bosh sahifa"
activity: "Faollik"
images: "Rasmlar"
image: "Rasm"
birthday: "Tug'ilgan kun"
yearsOld: "{age} yashar"
registeredDate: "Ro'yxatdan o'tgan sanasi"
location: "Manzil"
theme: "Rang sxemasi"
themeForLightMode: "Yorug' rejim uchun rang sxemasi"
themeForDarkMode: "Qorong'i rejim uchun rang sxemasi"
light: "Yorug'"
dark: "Qorongʻi"
lightThemes: "Yorug rang sxemasi"
darkThemes: "Qorong'i rang sxemasi"
syncDeviceDarkMode: "Qurilmangizning qorongi rejimi bilan sinxronlashtiring"
drive: "Disk"
fileName: "Fayl nomi"
selectFile: "Faylni tanlang"
selectFiles: "Fayllarni tanlang"
selectFolder: "Jildni tanlang"
selectFolders: "Jildlarni tanlang"
renameFile: "Faylni nomini tahrirlash"
folderName: "Jild nomi"
createFolder: "Papka qo'shish"
renameFolder: "Papka nomini ozgartirish"
deleteFolder: "Papkani ochirish"
addFile: "Fayl qoshish"
emptyDrive: "Diskingiz bo'sh"
emptyFolder: "Ushbu papka bo'sh"
unableToDelete: "O'chirilmadi"
inputNewFileName: "Yangi fayl nomini kiriting"
inputNewDescription: "Iltimos, yangi sarlavha kiriting."
inputNewFolderName: "Yangi papka nomini kiriting"
hasChildFilesOrFolders: "Bu papka boʻsh emas va uni oʻchirib boʻlmaydi."
copyUrl: "Bog'lamadan nusxa olish"
rename: "Qayta nomlash"
avatar: "Avatar"
banner: "Banner"
whenServerDisconnected: "server bilan aloqa uzilganda"
disconnectedFromServer: "Server bilan ulanish uzulib qoldi"
reload: "Yangilash"
doNothing: "E'tiborsiz qoldirish"
reloadConfirm: "Timeline'ni yangilashni xohlaysizmi?"
watch: "Kuzatmoq"
unwatch: "Kuzatishni to'xtatish"
accept: "Ruxsat"
reject: "Rad etish"
normal: "Yaxshi"
instanceName: "Server nomi"
instanceDescription: "Server tavsifi"
maintainerName: "Qo'llab-quvvatlovchi"
maintainerEmail: "Administratorning elektron pochtasi"
tosUrl: "Foydalanish shartlariga havola"
thisYear: "Joriy yil"
thisMonth: "Shu oy"
today: "Bugun"
dayX: "{day}"
monthX: "{month}"
yearX: "{year}"
pages: "Sahifalar"
integration: "Integratsiya"
connectService: "Ulash"
disconnectService: "Uzish"
enableLocalTimeline: "Mahalliy vaqt mintaqasini yoqing"
enableGlobalTimeline: "Global vaqt mintaqasini yoqing"
registration: "Ro'yxatdan o'tish"
enableRegistration: "Ro'yxatdan o'tishni yoqing"
invite: "Taklif qilish"
inMb: "Megabaytlarda"
iconUrl: "Ikonkaning URL manzili (masalan: favicon)"
backgroundImageUrl: "Fon rasmi URL manzili"
basicInfo: "Asosiy ma'lumot"
pinnedUsers: "Qadalgan foydalanuvchilar"
pinnedPages: "Qadalgan Sahifalar"
pinnedNotes: "Qadalgan qayd"
hcaptcha: "hCaptcha"
enableHcaptcha: "hCaptchani yoqish"
hcaptchaSiteKey: "Sayt kaliti"
hcaptchaSecretKey: "Mahfiy kalit"
recaptcha: "reCAPTCHA"
enableRecaptcha: "reCAPTCHA ni yoqish"
recaptchaSiteKey: "Sayt kaliti"
recaptchaSecretKey: "Maxfiy kalit"
turnstileSiteKey: "Sayt kaliti"
turnstileSecretKey: "Maxfiy kalit"
antennas: "Antennalar"
manageAntennas: "Antennalarni boshqarish"
name: "Ism"
antennaSource: "Antenna manbai"
antennaKeywords: "Kalit so'zni qabul qilish"
notifyAntenna: "Yangi qaydlar haqida menga xabar bering"
connectedTo: "Quyidagi akkountlarga ulangan"
silence: "Sukunat"
popularUsers: "Mashhur foydalanuvchilar."
recentlyRegisteredUsers: "Yaqinda ro'yxatdan o'tgan foydalanuvchilar"
exploreUsersCount: "{count} ta foydalanuvchi bor"
popularTags: "Ommabop teglar"
userList: "Ro'yxatlar"
about: "Haqida"
aboutMisskey: "Misskey haqida"
administrator: "Administrator"
token: "Tasdiqlash"
2fa: "Ikki faktorli autentifikatsiya"
totp: "Autentifikatsiya ilovasi"
totpDescription: "Bir martalik parollarni kiritish uchun autentifikatsiya ilovasidan foydalaning"
moderator: "Moderator"
nUsersMentioned: "{n} tomonidan chop etilgan"
resetPassword: "Parolni tiklash"
share: "Yuborish"
notFound: "Topilmadi"
uploadFolder: "Jildni yuklash"
cacheClear: "Keshni tozalash"
markAsReadAllTalkMessages: "Barcha suhbatlarni o'qilgan deb belgilang"
help: "Yordam"
inputMessageHere: "Xabar kiriting"
close: "Yopish"
invites: "Taklif qilish"
members: "A'zolar"
transfer: "topshiriq"
title: "Sarlavha"
text: "Matn"
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"
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"
local: "Mahalliy"
total: "Jami"
weekOverWeekChanges: "Oxirgi haftadagi o'zgarishlar"
dayOverDayChanges: "Kecha bo'lgan o'zgarishlar"
appearance: "Tasgqi ko'rinish"
clientSettings: "Klient 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"
sound: "ovoz"
none: "Hechnima"
volume: "Ovoz balandligi"
details: "Batafsil"
output: "Chiqish"
deleteAllFiles: "barcha fayllarni o'chirish"
deleteAllFilesConfirm: "Barcha fayllar oʻchirilsinmi?"
userSuspended: "Bu foydalanuvchi muzlatilgan."
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"
divider: "Ajratrmoq"
addItem: "Element qo'shish"
serviceworkerInfo: "bildirishnomalar uchun yoqilgan bo'lishi kerak."
deletedNote: "Oʻchirilgan post"
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"
disableAll: "hammasini o'chirib qo'ying"
edit: "Tahrirlash"
email: "Email"
smtpHost: "Host"
smtpUser: "Foydalanuvchi nomi"
smtpPass: "Parol"
copy: "Nusxa olish"
notificationSetting: "Bildirishnoma sozlamalari"
other: "Qoshimcha"
behavior: "Hatti-harakatlar"
sample: "Namuna"
public: "Ommaviy"
clearCache: "Keshni tozalash"
onlineUsersCount: "Faol userlar"
myTheme: "Mening rang sxemam"
backgroundColor: "Fon"
accentColor: "Urg'u"
textColor: "Matn"
info: "Haqida"
user: "Foydalanuvchilar"
global: "Global"
squareAvatars: "Kvadrat avatarkalar"
searchByGoogle: "Izlash"
indefinitely: "Hech qachon"
file: "Fayllar"
label: "Yorliq"
color: "Rang"
_achievements:
_types:
_viewInstanceChart:
title: "Tahlilchi"
_ad:
hide: "Boshqa ko'rsatilmasin"
_email:
_follow:
title: "sizga obuna bo'ldi"
_registry:
key: "Kalit"
keys: "Kalit"
_instanceTicker:
none: "Boshqa ko'rsatilmasin"
always: "Doimo ko'rsatilsin"
_theme:
install: "Rang sxemasini o'rnatish"
manage: "Rang sxemalarini boshqarish"
code: "Rang sxemasining kodi"
description: "Tavsif"
installed: "{name} o'rnatildi"
installedThemes: "O'rnatilgan rang sxemalari"
alreadyInstalled: "Ushbu rang sxemasi allaqachon o'rnatilgan"
invalid: "Ushbu rang sxemasining formati yaroqsiz"
make: "Rang sxemasini yasash"
base: "Asos"
addConstant: "O'zgarmas qo'shish"
constant: "O'zgarmas"
color: "Rang"
key: "Kalit"
func: "Funksiyalar"
funcKind: "Funksiya turi"
argument: "Argument"
darken: "Qoraytirish"
lighten: "Yoritish"
inputConstantName: "Ushbu o'zgarmas uchun nom kiriting"
deleteConstantConfirm: "Siz rostdan ham {const} o'zgarmasni o'chirmoqchimisiz?"
keys:
accent: "Urg'u"
bg: "Fon"
fg: "Matn"
focus: "Fokus"
panel: "Panel"
shadow: "Soya"
header: "Sarlavha"
navBg: "Yon panel foni"
navFg: "Yon panel matni"
mention: "Murojat"
renote: "Qayta qayd etish"
divider: "Ajratrmoq"
accentDarken: "Urg'u (Qoraytirilgan)"
accentLighten: "Urg'u (Yoritilgan)"
fgHighlighted: "Belgilangan matn"
_sfx:
note: "Qaydlar"
notification: "Xabarnomalar"
chat: "Suhbat"
_ago:
minutesAgo: "{n} daqiqa oldin"
hoursAgo: "{n} soat oldin"
daysAgo: "{n} kun oldin"
_2fa:
renewTOTPCancel: "Hozir emas"
_permissions:
"read:blocks": "Bloklangan foydalanuvchilar roʻyxatini koʻring"
"write:blocks": "Bloklangan foydalanuvchilar roʻyxatini tahrirlang"
_weekday:
saturday: "Shanba"
_widgets:
profile: "Profil"
instanceInfo: "Instans haqida ma'lumot"
notifications: "Xabarnomalar"
timeline: "Xronologiya"
clock: "Soat"
activity: "Faollik"
photos: "Rasmlar"
digitalClock: "Raqamli soat"
unixClock: "UNIX soat"
federation: "Federatsiya"
button: "Tugma"
jobQueue: "Vazifalar navbati"
_userList:
chooseList: "Ro'yxat tanlash"
_cw:
show: "Koproq korish"
chars: "{count} ta belgi(lar)"
files: "{count} ta fayl(lar)"
_poll:
noOnlyOneChoice: "Kamida ikkita tanvol kerak"
infinite: "Hech qachon"
at: "...da tugatish"
after: "...dan keyin tugatish"
deadlineTime: "Vaqt"
duration: "Davomiylik"
votesCount: "{n} ovozlar"
totalVotes: "Umuman {n} ovozlar"
vote: "Ovoz berish"
showResult: "Natijalarni ko'rish"
voted: "Ovoz berildi"
closed: "Yakunladi"
remainingDays: "{d} kun {h} soat qoldi"
remainingHours: "{h} soat {m} daqiqa qoldi"
remainingMinutes: "{m} daqiqa {s} sekund qoldi"
remainingSeconds: "{s} sekund qoldi"
_visibility:
public: "Ommaviy"
publicDescription: "Sizning ovozingiz barcha foydalanuvchilarga ko'rinadi"
home: "Bosh sahifa"
followers: "Obunachilar"
specified: "Bevosita"
_profile:
name: "Ism"
username: "Foydalanuvchi nomi"
description: "Biografiya"
metadata: "Qo'shimcha ma'lumot"
metadataLabel: "Yorliq"
metadataContent: "Tarkib"
changeBanner: "Bannerni o'zgartirish"
_exportOrImport:
allNotes: "Barcha qaydlar"
followingList: "Obuna bolish"
muteList: "Ovozni ochirish"
blockingList: "Bloklangan foydalanuvchilar"
userLists: "Ro'yxatlar"
_charts:
federation: "Federatsiya"
apRequest: "So'rovlar"
usersTotal: "Foydalanuvchilarning umumiy soni"
activeUsers: "Faol foydalanuvchilar"
notesTotal: "Qaydlarning umumiy soni"
filesTotal: "Fayllarning umumiy soni"
_instanceCharts:
requests: "So'rovlar"
notes: "Qaydlar sonidagi farq"
cacheSize: "Kesh hajmidagi farq"
files: "Fayllar sonidagi farq"
_timelines:
home: "Bosh sahifa"
local: "Mahalliy"
social: "Ijtimoiy"
global: "Global"
_play:
featured: "Mashhur"
title: "Sarlavha"
script: "Skript"
summary: "Tavsif"
_pages:
newPage: "Yangi Sahifa yaratish"
editPage: "Ushbu Sahifani tahrirlash"
created: "Sahifa muvaffaqiyatli yaratildi"
updated: "Sahifa muvaffaqiyatli tahrirlandi"
deleted: "Sahifa muvaffaqiyatli o'chirildi"
pageSetting: "Sahifa sozlamalari"
nameAlreadyExists: "Ko'rsatilgan Sahifa URL'i allaqachon mavjud"
invalidNameTitle: "Ko'rsatilgan Sahifa URL'i yaroqsiz"
editThisPage: "Ushbu Sahifani tahrirlash"
viewPage: "Sizning Sahifalaringizni ko'rish"
my: "Mening Sahifalarim"
featured: "Mashhur"
contents: "Tarkib"
title: "Sarlavha"
url: "Sahifa URL'i"
summary: "Sahifa bayoni"
font: "Shrift"
fontSerif: "Serif"
fontSansSerif: "Sans Serif"
selectType: "Turni tanlang"
contentBlocks: "Tarkib"
blocks:
text: "Matn"
textarea: "Matn maydoni"
section: "Bo'lim"
image: "Rasmlar"
button: "Tugma"
note: "Biriktirilgan qayd"
_note:
id: "Qayd ID"
detailed: "Batafsil ko'rinishi"
_relayStatus:
requesting: "Kutilmoqda"
accepted: "Tasdiqlandi"
rejected: "Rad etildi"
_notification:
fileUploaded: "Fayl muvaffaqiyatli yuklandi"
youGotMention: "{name} sizni eslab o'tdi"
youGotReply: "{name} sizga javob berdi"
youGotQuote: "{name} sizdan iqtibos keltirdi"
youRenoted: "{name} dan qayta qayd qilish"
youWereFollowed: "sizga obuna bo'ldi"
unreadAntennaNote: "Antenna {name}"
_types:
all: "Barchasi"
follow: "Obuna bolish"
mention: "Murojat"
renote: "Qayta qayd etish"
quote: "Iqtibos keltirish"
reaction: "Reaktsiyalar"
receiveFollowRequest: "Qabul qilingan kuzatuv so'rovlari"
_actions:
reply: "Javob berish"
renote: "Qayta qayd qilish"
_deck:
alwaysShowMainColumn: "Har doim asosiy ustunni ko'rsatish"
columnAlign: "Ustunlarni tekislash"
addColumn: "Ustun qo'shish"
configureColumn: "Ustun sozlamalari"
swapLeft: "Chapdagi ustun bilan joyni almashtirish"
swapRight: "O'ngdagi ustun bilan joyni almashtirish"
swapUp: "Yuqoridagi ustun bilan joyni almashtirish"
swapDown: "Quyidagi ustun bilan joyni almashtirish"
profile: "Profil"
newProfile: "Yangi profil"
deleteProfile: "Profilni ochirib tashlash"
_columns:
main: "Asosiy"
notifications: "Xabarnomalar"
tl: "Xronologiya"
antenna: "Antennalar"
list: "Royxat"
channel: "Kanal"
mentions: "Eslatib o'tish"
direct: "Bevosita qaydlar"
roleTimeline: "Rol xronologiyasi"
_webhookSettings:
name: "Ism"
active: "Yoqilgan"
_events:
renote: "Qayta qayd qilinganda"
mention: "Eslanganda"

View File

@ -1091,6 +1091,9 @@ usedAt: "使用时间"
unused: "未使用" unused: "未使用"
used: "已使用" used: "已使用"
expired: "已过期" expired: "已过期"
doYouAgree: "你同意吗?"
beSureToReadThisAsItIsImportant: "请好好阅读,这真的很重要。"
iHaveReadXCarefullyAndAgree: "我已经仔细阅读并同意了「{x}」的内容。"
_initialAccountSetting: _initialAccountSetting:
accountCreated: "账户创建完成了!" accountCreated: "账户创建完成了!"
letsStartAccountSetup: "来进行帐户的初始设置吧。" letsStartAccountSetup: "来进行帐户的初始设置吧。"

View File

@ -1,6 +1,6 @@
{ {
"name": "misskey", "name": "misskey",
"version": "13.14.1", "version": "13.14.2",
"codename": "nasubi", "codename": "nasubi",
"repository": { "repository": {
"type": "git", "type": "git",

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

@ -95,7 +95,7 @@ export class ApAudienceService {
private isPublic(id: string): boolean { private isPublic(id: string): boolean {
return [ return [
'https://www.w3.org/ns/activitystreams#Public', 'https://www.w3.org/ns/activitystreams#Public',
'as#Public', 'as:Public',
'Public', 'Public',
].includes(id); ].includes(id);
} }

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

@ -60,7 +60,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
} }
query.limit(ps.limit); query.limit(ps.limit);
query.skip(ps.offset); query.offset(ps.offset);
const tickets = await query.getMany(); const tickets = await query.getMany();

View File

@ -105,7 +105,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
} }
query.limit(ps.limit); query.limit(ps.limit);
query.skip(ps.offset); query.offset(ps.offset);
const users = await query.getMany(); const users = await query.getMany();

View File

@ -126,7 +126,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
query.andWhere('instance.host like :host', { host: '%' + sqlLikeEscape(ps.host.toLowerCase()) + '%' }); query.andWhere('instance.host like :host', { host: '%' + sqlLikeEscape(ps.host.toLowerCase()) + '%' });
} }
const instances = await query.limit(ps.limit).skip(ps.offset).getMany(); const instances = await query.limit(ps.limit).offset(ps.offset).getMany();
return await this.instanceEntityService.packMany(instances); return await this.instanceEntityService.packMany(instances);
}); });

View File

@ -42,7 +42,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
.orderBy('tag.count', 'DESC') .orderBy('tag.count', 'DESC')
.groupBy('tag.id') .groupBy('tag.id')
.limit(ps.limit) .limit(ps.limit)
.skip(ps.offset) .offset(ps.offset)
.getMany(); .getMany();
return hashtags.map(tag => tag.name); return hashtags.map(tag => tag.name);

View File

@ -83,7 +83,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
const polls = await query const polls = await query
.orderBy('poll.noteId', 'DESC') .orderBy('poll.noteId', 'DESC')
.limit(ps.limit) .limit(ps.limit)
.skip(ps.offset) .offset(ps.offset)
.getMany(); .getMany();
if (polls.length === 0) return []; if (polls.length === 0) return [];

View File

@ -81,7 +81,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
if (me) this.queryService.generateBlockQueryForUsers(query, me); if (me) this.queryService.generateBlockQueryForUsers(query, me);
query.limit(ps.limit); query.limit(ps.limit);
query.skip(ps.offset); query.offset(ps.offset);
const users = await query.getMany(); const users = await query.getMany();

View File

@ -70,7 +70,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
query.setParameters(followingQuery.getParameters()); query.setParameters(followingQuery.getParameters());
const users = await query.limit(ps.limit).skip(ps.offset).getMany(); const users = await query.limit(ps.limit).offset(ps.offset).getMany();
return await this.userEntityService.packMany(users, me, { detail: true }); return await this.userEntityService.packMany(users, me, { detail: true });
}); });

View File

@ -75,7 +75,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
users = await usernameQuery users = await usernameQuery
.orderBy('user.updatedAt', 'DESC', 'NULLS LAST') .orderBy('user.updatedAt', 'DESC', 'NULLS LAST')
.limit(ps.limit) .limit(ps.limit)
.skip(ps.offset) .offset(ps.offset)
.getMany(); .getMany();
} else { } else {
const nameQuery = this.usersRepository.createQueryBuilder('user') const nameQuery = this.usersRepository.createQueryBuilder('user')
@ -102,7 +102,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
users = await nameQuery users = await nameQuery
.orderBy('user.updatedAt', 'DESC', 'NULLS LAST') .orderBy('user.updatedAt', 'DESC', 'NULLS LAST')
.limit(ps.limit) .limit(ps.limit)
.skip(ps.offset) .offset(ps.offset)
.getMany(); .getMany();
if (users.length < ps.limit) { if (users.length < ps.limit) {
@ -128,7 +128,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
users = users.concat(await query users = users.concat(await query
.orderBy('user.updatedAt', 'DESC', 'NULLS LAST') .orderBy('user.updatedAt', 'DESC', 'NULLS LAST')
.limit(ps.limit) .limit(ps.limit)
.skip(ps.offset) .offset(ps.offset)
.getMany(), .getMany(),
); );
} }

View File

@ -3,7 +3,7 @@ import { dirname } from 'node:path';
import { fileURLToPath } from 'node:url'; import { fileURLToPath } from 'node:url';
import { Inject, Injectable } from '@nestjs/common'; import { Inject, Injectable } from '@nestjs/common';
import { createBullBoard } from '@bull-board/api'; import { createBullBoard } from '@bull-board/api';
import { BullAdapter } from '@bull-board/api/bullAdapter.js'; import { BullMQAdapter } from '@bull-board/api/bullMQAdapter.js';
import { FastifyAdapter } from '@bull-board/fastify'; import { FastifyAdapter } from '@bull-board/fastify';
import ms from 'ms'; import ms from 'ms';
import sharp from 'sharp'; import sharp from 'sharp';
@ -168,7 +168,7 @@ export class ClientServerService {
this.dbQueue, this.dbQueue,
this.objectStorageQueue, this.objectStorageQueue,
this.webhookDeliverQueue, this.webhookDeliverQueue,
].map(q => new BullAdapter(q)), ].map(q => new BullMQAdapter(q)),
serverAdapter, serverAdapter,
}); });

View File

@ -16,8 +16,12 @@ block og
meta(property='og:title' content= title) meta(property='og:title' content= title)
meta(property='og:description' content= post.description) meta(property='og:description' content= post.description)
meta(property='og:url' content= url) meta(property='og:url' content= url)
meta(property='og:image' content= post.files[0].thumbnailUrl) if post.isSensitive
meta(property='twitter:card' content='summary_large_image') meta(property='og:image' content= avatarUrl)
meta(property='twitter:card' content='summary')
else
meta(property='og:image' content= post.files[0].thumbnailUrl)
meta(property='twitter:card' content='summary_large_image')
block meta block meta
if user.host || profile.noCrawle if user.host || profile.noCrawle

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

@ -1,5 +1,5 @@
<template> <template>
<div> <div ref="root">
<XBanner v-for="media in mediaList.filter(media => !previewable(media))" :key="media.id" :media="media"/> <XBanner v-for="media in mediaList.filter(media => !previewable(media))" :key="media.id" :media="media"/>
<div v-if="mediaList.filter(media => previewable(media)).length > 0" :class="$style.container"> <div v-if="mediaList.filter(media => previewable(media)).length > 0" :class="$style.container">
<div <div
@ -22,8 +22,43 @@
</div> </div>
</template> </template>
<script lang="ts">
/**
* アスペクト比算出のためにHTMLElement.clientWidthを使うが
* 大変重たいのでコンテナ要素とメディアリスト幅のペアをキャッシュする
* タイムラインごとにスクロールコンテナが存在する前提だが
*/
const widthCache = new Map<Element, number>();
/**
* コンテナ要素がリサイズされたらキャッシュを削除する
*/
const ro = new ResizeObserver(entries => {
for (const entry of entries) {
widthCache.delete(entry.target);
}
});
async function getClientWidthWithCache(targetEl: HTMLElement, containerEl: HTMLElement, count = 0) {
if (_DEV_) console.log('getClientWidthWithCache', { targetEl, containerEl, count, cache: widthCache.get(containerEl) });
if (widthCache.has(containerEl)) return widthCache.get(containerEl)!;
const width = targetEl.clientWidth;
if (count <= 10 && width < 64) {
// width64
await new Promise(resolve => setTimeout(resolve, 50));
return getClientWidthWithCache(targetEl, containerEl, count + 1);
}
widthCache.set(containerEl, width);
ro.observe(containerEl);
return width;
}
</script>
<script lang="ts" setup> <script lang="ts" setup>
import { onMounted, watch, 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';
@ -34,19 +69,33 @@ import XVideo from '@/components/MkMediaVideo.vue';
import * as os from '@/os'; import * as os from '@/os';
import { FILE_TYPE_BROWSERSAFE } from '@/const'; import { FILE_TYPE_BROWSERSAFE } from '@/const';
import { defaultStore } from '@/store'; import { defaultStore } from '@/store';
import { getScrollContainer, getBodyScrollHeight } from '@/scripts/scroll';
const props = defineProps<{ const props = defineProps<{
mediaList: misskey.entities.DriveFile[]; mediaList: misskey.entities.DriveFile[];
raw?: boolean; raw?: boolean;
}>(); }>();
const root = shallowRef<HTMLDivElement>();
const container = shallowRef<HTMLElement | null | undefined>(undefined);
const gallery = shallowRef<HTMLDivElement>(); 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;
function calcAspectRatio() { const popstateHandler = (): void => {
if (!gallery.value) return; if (lightbox.pswp && lightbox.pswp.isOpen === true) {
lightbox.pswp.close();
}
};
/**
* アスペクト比をmediaListWithOneImageAppearanceに基づいていい感じに調整する
* aspect-ratioではなくheightを使う
*/
async function calcAspectRatio() {
if (!gallery.value || !root.value) return;
let img = props.mediaList[0]; let img = props.mediaList[0];
@ -55,29 +104,47 @@ function calcAspectRatio() {
return; return;
} }
// if (!container.value) container.value = getScrollContainer(root.value);
const ratioMax = (ratio: number) => `${Math.max(ratio, img.properties.width / img.properties.height).toString()} / 1`; const width = container.value ? await getClientWidthWithCache(root.value, container.value) : root.value.clientWidth;
const heightMin = (ratio: number) => {
const imgResizeRatio = width / img.properties.width;
const imgDrawHeight = img.properties.height * imgResizeRatio;
const maxHeight = width * ratio;
const height = Math.min(imgDrawHeight, maxHeight);
if (_DEV_) console.log('Image height calculated:', { width, properties: img.properties, imgResizeRatio, imgDrawHeight, maxHeight, height });
return `${height}px`;
};
switch (defaultStore.state.mediaListWithOneImageAppearance) { switch (defaultStore.state.mediaListWithOneImageAppearance) {
case '16_9': case '16_9':
gallery.value.style.aspectRatio = ratioMax(16 / 9); gallery.value.style.height = heightMin(9 / 16);
break; break;
case '1_1': case '1_1':
gallery.value.style.aspectRatio = ratioMax(1); gallery.value.style.height = heightMin(1);
break; break;
case '2_3': case '2_3':
gallery.value.style.aspectRatio = ratioMax(2 / 3); gallery.value.style.height = heightMin(3 / 2);
break; break;
default: default: {
gallery.value.style.aspectRatio = ''; const maxHeight = Math.max(64, (container.value ? container.value.clientHeight : getBodyScrollHeight()) * 0.5 || 360);
if (width === 0 || !maxHeight) return;
const imgResizeRatio = width / img.properties.width;
const imgDrawHeight = img.properties.height * imgResizeRatio;
gallery.value.style.height = `${Math.max(64, Math.min(imgDrawHeight, maxHeight))}px`;
gallery.value.style.minHeight = 'initial';
gallery.value.style.maxHeight = 'initial';
break; break;
}
} }
gallery.value.style.aspectRatio = 'initial';
} }
watch([defaultStore.reactiveState.mediaListWithOneImageAppearance, gallery], () => calcAspectRatio());
onMounted(() => { onMounted(() => {
const lightbox = new PhotoSwipeLightbox({ calcAspectRatio();
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
@ -161,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');
@ -179,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
@ -203,7 +271,7 @@ const previewable = (file: misskey.entities.DriveFile): boolean => {
&.n1 { &.n1 {
grid-template-rows: 1fr; grid-template-rows: 1fr;
// default (expand) // default but fallback (expand)
min-height: 64px; min-height: 64px;
max-height: clamp( max-height: clamp(
64px, 64px,
@ -212,20 +280,20 @@ const previewable = (file: misskey.entities.DriveFile): boolean => {
); );
&.n116_9 { &.n116_9 {
min-height: none; min-height: initial;
max-height: none; max-height: initial;
aspect-ratio: 16 / 9; // fallback aspect-ratio: 16 / 9; // fallback
} }
&.n11_1{ &.n11_1{
min-height: none; min-height: initial;
max-height: none; max-height: initial;
aspect-ratio: 1 / 1; // fallback aspect-ratio: 1 / 1; // fallback
} }
&.n12_3 { &.n12_3 {
min-height: none; min-height: initial;
max-height: none; max-height: initial;
aspect-ratio: 2 / 3; // fallback aspect-ratio: 2 / 3; // fallback
} }
} }

View File

@ -431,6 +431,7 @@ defineExpose({
margin: auto; margin: auto;
padding: 32px; padding: 32px;
display: flex; display: flex;
overflow: auto;
@media (max-width: 500px) { @media (max-width: 500px) {
padding: 16px; padding: 16px;

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();
@ -758,6 +759,7 @@ function showReactions(): void {
padding: 16px; padding: 16px;
border: dashed 1px var(--renote); border: dashed 1px var(--renote);
border-radius: 8px; border-radius: 8px;
overflow: clip;
} }
.channel { .channel {

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();
@ -595,6 +596,7 @@ if (appearNote.replyId) {
padding: 16px; padding: 16px;
border: dashed 1px var(--renote); border: dashed 1px var(--renote);
border-radius: 8px; border-radius: 8px;
overflow: clip;
} }
.channel { .channel {

View File

@ -37,7 +37,6 @@ const showContent = $ref(false);
display: flex; display: flex;
margin: 0; margin: 0;
padding: 0; padding: 0;
overflow: clip;
font-size: 0.95em; font-size: 0.95em;
} }

View File

@ -540,7 +540,7 @@ function onCompositionEnd(ev: CompositionEvent) {
} }
async function onPaste(ev: ClipboardEvent) { async function onPaste(ev: ClipboardEvent) {
for (const { item, i } of Array.from(ev.clipboardData.items).map((item, i) => ({ item, i }))) { for (const { item, i } of Array.from(ev.clipboardData.items, (item, i) => ({ item, i }))) {
if (item.kind === 'file') { if (item.kind === 'file') {
const file = item.getAsFile(); const file = item.getAsFile();
const lio = file.name.lastIndexOf('.'); const lio = file.name.lastIndexOf('.');
@ -907,7 +907,6 @@ defineExpose({
display: flex; display: flex;
flex-wrap: nowrap; flex-wrap: nowrap;
gap: 4px; gap: 4px;
margin-bottom: -10px;
} }
.headerLeft { .headerLeft {
@ -1025,7 +1024,7 @@ defineExpose({
} }
.targetNote { .targetNote {
padding: 10px 20px 16px 20px; padding: 0 20px 16px 20px;
} }
.withQuote { .withQuote {

View File

@ -16,8 +16,8 @@ import tinycolor from 'tinycolor2';
const loaded = !!window.TagCanvas; const loaded = !!window.TagCanvas;
const SAFE_FOR_HTML_ID = 'abcdefghijklmnopqrstuvwxyz'; const SAFE_FOR_HTML_ID = 'abcdefghijklmnopqrstuvwxyz';
const computedStyle = getComputedStyle(document.documentElement); const computedStyle = getComputedStyle(document.documentElement);
const idForCanvas = Array.from(Array(16)).map(() => SAFE_FOR_HTML_ID[Math.floor(Math.random() * SAFE_FOR_HTML_ID.length)]).join(''); const idForCanvas = Array.from({ length: 16 }, () => SAFE_FOR_HTML_ID[Math.floor(Math.random() * SAFE_FOR_HTML_ID.length)]).join('');
const idForTags = Array.from(Array(16)).map(() => SAFE_FOR_HTML_ID[Math.floor(Math.random() * SAFE_FOR_HTML_ID.length)]).join(''); const idForTags = Array.from({ length: 16 }, () => SAFE_FOR_HTML_ID[Math.floor(Math.random() * SAFE_FOR_HTML_ID.length)]).join('');
let available = $ref(false); let available = $ref(false);
let rootEl = $shallowRef<HTMLElement | null>(null); let rootEl = $shallowRef<HTMLElement | null>(null);
let canvasEl = $shallowRef<HTMLCanvasElement | null>(null); let canvasEl = $shallowRef<HTMLCanvasElement | null>(null);

View File

@ -110,7 +110,7 @@ const selectAll = () => {
if (selectedEmojis.value.length > 0) { if (selectedEmojis.value.length > 0) {
selectedEmojis.value = []; selectedEmojis.value = [];
} else { } else {
selectedEmojis.value = emojisPaginationComponent.value.items.map(item => item.id); selectedEmojis.value = Array.from(emojisPaginationComponent.value.items.values(), item => item.id);
} }
}; };

View File

@ -166,7 +166,7 @@ const headerActions = $computed(() => []);
const headerTabs = $computed(() => []); const headerTabs = $computed(() => []);
definePageMetadata(computed(() => page ? { definePageMetadata(computed(() => page ? {
title: computed(() => page.title || page.name), title: page.title || page.name,
avatar: page.user, avatar: page.user,
path: `/@${page.user.username}/pages/${page.name}`, path: `/@${page.user.username}/pages/${page.name}`,
share: { share: {

View File

@ -258,6 +258,7 @@ watch([
showGapBetweenNotesInTimeline, showGapBetweenNotesInTimeline,
instanceTicker, instanceTicker,
overridedDeviceKind, overridedDeviceKind,
mediaListWithOneImageAppearance,
], async () => { ], async () => {
await reloadAsk(); await reloadAsk();
}); });

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

@ -2,7 +2,7 @@ const twemojiSvgBase = '/twemoji';
const fluentEmojiPngBase = '/fluent-emoji'; const fluentEmojiPngBase = '/fluent-emoji';
export function char2twemojiFilePath(char: string): string { export function char2twemojiFilePath(char: string): string {
let codes = Array.from(char).map(x => x.codePointAt(0)?.toString(16)); let codes = Array.from(char, x => x.codePointAt(0)?.toString(16));
if (!codes.includes('200d')) codes = codes.filter(x => x !== 'fe0f'); if (!codes.includes('200d')) codes = codes.filter(x => x !== 'fe0f');
codes = codes.filter(x => x && x.length); codes = codes.filter(x => x && x.length);
const fileName = codes.join('-'); const fileName = codes.join('-');
@ -10,7 +10,7 @@ export function char2twemojiFilePath(char: string): string {
} }
export function char2fluentEmojiFilePath(char: string): string { export function char2fluentEmojiFilePath(char: string): string {
let codes = Array.from(char).map(x => x.codePointAt(0)?.toString(16)); let codes = Array.from(char, x => x.codePointAt(0)?.toString(16));
// Fluent Emojiは国旗非対応 https://github.com/microsoft/fluentui-emoji/issues/25 // Fluent Emojiは国旗非対応 https://github.com/microsoft/fluentui-emoji/issues/25
if (codes[0]?.startsWith('1f1')) return char2twemojiFilePath(char); if (codes[0]?.startsWith('1f1')) return char2twemojiFilePath(char);
if (!codes.includes('200d')) codes = codes.filter(x => x !== 'fe0f'); if (!codes.includes('200d')) codes = codes.filter(x => x !== 'fe0f');

View File

@ -12,7 +12,8 @@ export function chooseFileFromPc(multiple: boolean, keepOriginal = false): Promi
input.type = 'file'; input.type = 'file';
input.multiple = multiple; input.multiple = multiple;
input.onchange = () => { input.onchange = () => {
const promises = Array.from(input.files).map(file => uploadFile(file, defaultStore.state.uploadFolder, undefined, keepOriginal)); if (!input.files) return res([]);
const promises = Array.from(input.files, file => uploadFile(file, defaultStore.state.uploadFolder, undefined, keepOriginal));
Promise.all(promises).then(driveFiles => { Promise.all(promises).then(driveFiles => {
res(driveFiles); res(driveFiles);

View File

@ -6,11 +6,13 @@
--marginHalf: 10px; --marginHalf: 10px;
--margin: var(--marginFull); --margin: var(--marginFull);
--minBottomSpacing: 0px;
// switch dynamically
--minBottomSpacingMobile: calc(72px + max(12px, env(safe-area-inset-bottom, 0px)));
--minBottomSpacing: var(--minBottomSpacingMobile);
@media (max-width: 500px) { @media (max-width: 500px) {
--margin: var(--marginHalf); --margin: var(--marginHalf);
--minBottomSpacing: calc(72px + max(12px, env(safe-area-inset-bottom, 0px)));
} }
//--ad: rgb(255 169 0 / 10%); //--ad: rgb(255 169 0 / 10%);

View File

@ -207,9 +207,11 @@ watch($$(navFooter), () => {
if (navFooter) { if (navFooter) {
navFooterHeight = navFooter.offsetHeight; navFooterHeight = navFooter.offsetHeight;
document.body.style.setProperty('--stickyBottom', `${navFooterHeight}px`); document.body.style.setProperty('--stickyBottom', `${navFooterHeight}px`);
document.body.style.setProperty('--minBottomSpacing', 'var(--minBottomSpacingMobile)');
} else { } else {
navFooterHeight = 0; navFooterHeight = 0;
document.body.style.setProperty('--stickyBottom', '0px'); document.body.style.setProperty('--stickyBottom', '0px');
document.body.style.setProperty('--minBottomSpacing', '0px');
} }
}, { }, {
immediate: true, immediate: true,

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: