diff --git a/CHANGELOG.md b/CHANGELOG.md index 35c01aff0762bf01fd2d0e491266db8c10b73952..5385b800ef55e2cd9498d4e46fdfdbd30ae15ebf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,20 @@ --> +## 13.14.2 + +### Client +- リストTLã§ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè¿½åŠ ・削除ã•ã‚Œã¦ã‚‚TLã‚’åˆæœŸåŒ–ã—ãªã„よã†ã« +- URLå–得変数を関数ã«å¤‰æ›´ã€€CURRENT_URL -> Mk:url() +- Fix: モãƒã‚¤ãƒ«è¡¨ç¤ºã®ã¨ãページ下部ãŒãƒŠãƒ“ゲーションãƒãƒ¼ã«éš れるå•é¡Œã‚’ä¿®æ£ +- Fix: 一部モーダルダイアãƒã‚°ã§ã‚¹ã‚¯ãƒãƒ¼ãƒ«ã§ããªã„å•é¡Œã‚’ä¿®æ£ +- Fix: Selecting all emojis in Custom emoji is impossible +- Fix: PhotoSwipeã«ã‚ˆã‚‹ãƒ¡ãƒ¢ãƒªãƒªãƒ¼ã‚¯ã®ä¿®æ£ + +### Server +- Fix: APIã®ã‚ªãƒ•ã‚»ãƒƒãƒˆãŒå£Šã‚Œã¦ã„ãŸã›ã„ã§ã€Œã‚‚ã£ã¨è¦‹ã‚‹ã€ã§ã‚‚ã£ã¨è¦‹ã‚Œãªã„å•é¡Œã‚’ä¿®æ£ +- Fix: 外部サーãƒãƒ¼ã®æŠ•ç¨¿ãŒã‚¿ã‚¤ãƒ ラインã«è¡¨ç¤ºã•ã‚Œãªã„ã“ã¨ãŒã‚ã‚‹å•é¡Œã‚’ä¿®æ£ + ## 13.14.1 ### General diff --git a/locales/cs-CZ.yml b/locales/cs-CZ.yml index ceab50075a748914c3b598ccb4f4c2579895f1bd..21d0c464827c31d8dcf66008fd97a8886e9b276f 100644 --- a/locales/cs-CZ.yml +++ b/locales/cs-CZ.yml @@ -2,6 +2,7 @@ _lang_: "ÄŒeÅ¡tina" 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! 🚀" +poweredByMisskeyDescription: "{name} je jeden ze serverů využÃvajÃcà open source platformu <b>Misskey<b> (nazývaná \"Misskey instance\")." monthAndDay: "{day}. {month}." search: "VyhledávánÃ" notifications: "OznámenÃ" @@ -48,8 +49,15 @@ delete: "Smazat" 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." addToList: "PÅ™idat do seznamu" +addToAntenna: "PÅ™idat do antény" sendMessage: "Odeslat zprávu" +copyRSS: "KopÃrovat RSS" 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" reply: "OdpovÄ›dÄ›t" loadMore: "Zobrazit vÃce" @@ -60,6 +68,7 @@ receiveFollowRequest: "Žádost o sledovánà pÅ™ijata" followRequestAccepted: "Žádost o sledovánà pÅ™ijata" mention: "ZmÃnÄ›nÃ" mentions: "ZmÃnÄ›nÃ" +directNotes: "PÅ™Ãmé poznámky" importAndExport: "Import a export" import: "Importovat" export: "Exportovat" @@ -82,6 +91,7 @@ error: "Chyba" somethingHappened: "Jejda. NÄ›co se nepovedlo." retry: "Opakovat" 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." youShouldUpgradeClient: "Pro zobrazenà této stránky obnovte stránku pro aktualizaci klienta." enterListName: "Jméno seznamu" @@ -100,6 +110,8 @@ renoted: "PÅ™eposláno" cantRenote: "Tento pÅ™ÃspÄ›vek nelze pÅ™eposlat." cantReRenote: "OdpovÄ›Ä nemůže být odstranÄ›na." quote: "Citovat" +inChannelRenote: "PÅ™eposlánà v kanálu" +inChannelQuote: "Citace v kanálu" pinnedNote: "PÅ™ipnutá poznámka" pinned: "PÅ™ipnout" you: "Vy" @@ -108,6 +120,7 @@ sensitive: "NSFW" add: "PÅ™idat" reaction: "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Ã" rememberNoteVisibility: "Zapamatovat nastavenà zobrazenà poznámky" attachCancel: "Odstranit pÅ™Ãlohu" @@ -116,6 +129,8 @@ unmarkAsSensitive: "OdznaÄit jako NSFW" enterFileName: "Zadejte název souboru" mute: "Ztlumit" unmute: "OdmlÄet" +renoteMute: "Ztlumit poznámky" +renoteUnmute: "ZruÅ¡it ztlumenà poznámek" block: "Zablokovat" unblock: "Odblokovat" suspend: "Zmrazit" @@ -125,7 +140,10 @@ unblockConfirm: "Jste si jistà že chcete odblokovat tento úÄet?" suspendConfirm: "Jste si jistà že chcete suspendovat tenhle úÄet?" unsuspendConfirm: "Jste si jistà že chcete obnovit tenhle úÄet?" selectList: "Vybrat seznam" +editList: "Upravit seznam" +selectChannel: "Vybrat kanál" selectAntenna: "Vyberte Anténu" +editAntenna: "Upravit anténu" selectWidget: "Zvolte widget" editWidgets: "Upravit widget" editWidgetsExit: "Hotovo" @@ -138,6 +156,8 @@ addEmoji: "PÅ™idat emoji" settingGuide: "DoporuÄené nastavenÃ" 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." +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" 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" @@ -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." autoAcceptFollowed: "Automaticky akceptovat následovánà od úÄtů které sledujete" addAccount: "PÅ™idat úÄet" +reloadAccountsList: "Obnovit list úÄtů" loginFailed: "PÅ™ihlášenà se nezdaÅ™ilo." showOnRemote: "VÃce na původnÃm profilu" general: "ObecnÄ›" @@ -186,17 +207,26 @@ instanceInfo: "Informace o instanci" statistics: "Statistiky" clearQueue: "VyÄistit frontu" 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ěť" +clearCachedFilesConfirm: "Jste jistà že chcete smazat vÅ¡echny vzdálené soubory v mezipamÄ›ti?" 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é" editProfile: "Upravit můj profil" +noteDeleteConfirm: "Jste si jistà že chcete smazat tuhle poznámku?" pinLimitExceeded: "Nemůžete pÅ™ipnout dalÅ¡Ã poznámky." intro: "Instalace Misskey byla dokonÄena! ProsÃm vytvoÅ™te admina." done: "Hotovo" processing: "Zpracovávám" preview: "Náhled" default: "VýchozÃ" +defaultValueIs: "Základnà hodnota: {value}" noCustomEmojis: "Bez Emoji" +federating: "SdružovánÃ" blocked: "Blokováno" suspended: "Suspendováno" all: "VÅ¡e" @@ -217,6 +247,7 @@ more: "VÃce!" featured: "OblÃbené poznámky" usernameOrUserId: "Uživatelské jméno nebo uživatelské id" noSuchUser: "Uživatel nebyl nalezen" +lookup: "Vyhledat" announcements: "OznámenÃ" imageUrl: "URL obrázku" remove: "Smazat" @@ -227,10 +258,13 @@ resetAreYouSure: "Opravdu resetovat?" saved: "Uloženo" messaging: "Zprávy" 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" fromUrl: "Z URL" uploadFromUrl: "Nahrát z URL adresy" 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Ã." explore: "Objevovat" messageRead: "PÅ™eÄtené" @@ -238,6 +272,10 @@ noMoreHistory: "To je vÅ¡e" startMessaging: "Zahájit chat" nUsersRead: "pÅ™eÄteno {n} uživateli" 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" home: "Domů" 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" deleteFolder: "Odstranit složku" addFile: "PÅ™idat soubor" +emptyDrive: "Váš disk je prázdný" emptyFolder: "Tato složka je prázdná" unableToDelete: "Nelze smazat" inputNewFileName: "Zadejte nový název" +inputNewDescription: "Zadejte nový popisek" 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" rename: "PÅ™ejmenovat" avatar: "Avatar" banner: "Baner" +displayOfSensitiveMedia: "Zobrazit citlivé média" +whenServerDisconnected: "Když ztratÃte spojenà se serverem" disconnectedFromServer: "Spojenà bylo pÅ™eruÅ¡eno" reload: "Aktualizovat" doNothing: "Ignorovat" +reloadConfirm: "Chcete obnovit Äasovou osu?" watch: "Sledovat" unwatch: "PÅ™estat sledovat" accept: "SouhlasÃm" @@ -301,15 +346,22 @@ connectService: "PÅ™ipojit" disconnectService: "Odpojit" enableLocalTimeline: "Povolit loká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" enableRegistration: "Povolit registraci novým uživatelům" invite: "Pozvat" +driveCapacityPerLocalAccount: "Kapacita disku na lokálnÃho uživatele" +driveCapacityPerRemoteAccount: "Kapacita disku na vzdáleného uživatele" inMb: "V megabajtech" iconUrl: "Favicon URL" bannerUrl: "Baner URL" backgroundImageUrl: "Adresa URL obrázku pozadÃ" basicInfo: "Základnà informace" 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" hcaptcha: "hCaptcha" enableHcaptcha: "Aktivovat hCaptchu" @@ -319,30 +371,56 @@ recaptcha: "reCAPTCHA" enableRecaptcha: "Zapnout ReCAPTCHu" recaptchaSiteKey: "KlÃÄ stránky" recaptchaSecretKey: "Tajný KlÃÄ (Secret Key)" +turnstile: "Turnstile" +enableTurnstile: "Povolit Turnstile" turnstileSiteKey: "KlÃÄ stránky" 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" manageAntennas: "Spravovat Antény" name: "Jméno" 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" +antennaUsersDescription: "Vypsat jednoho uživatele na řádek" caseSensitive: "RozliÅ¡uje malá a velká pÃsmena" +withReplies: "Zahrnout odpovÄ›di" connectedTo: "NásledujÃcà úÄty jsou pÅ™ipojeny" notesAndReplies: "Poznámky a odpovÄ›di" 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é" 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" userList: "Seznamy" about: "Informace" aboutMisskey: "O Misskey" administrator: "Administrátor" 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" +moderation: "ModerovánÃ" nUsersMentioned: "{n} uživatelů zmÃnilo" +securityKeyAndPasskey: "BezpeÄnostnà klÃÄe a tokeny" securityKey: "BezpeÄnostnà klÃÄ" lastUsed: "Naposledy použito" +lastUsedAt: "Naposledy použito: {t}" 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" newPasswordIs: "Nové heslo je \"{password}\"" reduceUiAnimation: "SnÞit UI animace" @@ -391,14 +469,25 @@ or: "Nebo" language: "Jazyk" uiLanguage: "Jazyk uživatelského rozhranÃ" 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" signinHistory: "Historie pÅ™ihlášenÃ" +enableAdvancedMfm: "Zapnout pokroÄilé MFM" +enableAnimatedMfm: "Zapnout animované MFM" +doing: "Procesuju..." category: "Kategorie" tags: "Å tÃtky" +docSource: "Zdroj tohoto dokumentu" createAccount: "VytvoÅ™it úÄet" existingAccount: "ExistujÃcà úÄet" regenerate: "Obnovit" 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" dashboard: "PÅ™ehled" local: "LokálnÃ" @@ -412,15 +501,35 @@ accountSettings: "Nastavenà úÄtu" promotion: "Propagace" promote: "Propagovat" 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" +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" +objectStorageBucketDesc: "ProsÃm upÅ™esnÄ›te název bucketu použÃvaný poskytovatelem." objectStoragePrefix: "PÅ™edpona" +objectStoragePrefixDesc: "Soubory budou ukládány pod složkama s tÃmhle prefixem." 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" +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" +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" 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" +none: "Žádný" showInPage: "Zobrazit na stránce" popout: "Pop-out" volume: "Hlasitost" @@ -433,29 +542,61 @@ install: "Nainstalovat" uninstall: "Odinstalovat" installedApps: "Autorizované aplikace" nothing: "Nic nebylo nalezeno" +installedDate: "Datum autorizace" lastUsedDate: "Poslednà použitÃ" state: "Stav" sort: "SeÅ™adit" ascendingOrder: "VzestupnÄ›" descendingOrder: "SestupnÄ›" 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" script: "Skript" +disablePagesScript: "Vypnout AiScript na stránkách" updateRemoteUser: "Aktualizovat informace o vzdáleném úÄtu" deleteAllFiles: "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." +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" divider: "DÄ›lÃcà Äára" addItem: "PÅ™idat položku" +rearrange: "PÅ™eÅ™adit" relays: "Relay" addRelay: "PÅ™idat Relay" inboxUrl: "Inbox URL" +addedRelays: "PÅ™idané pÅ™enosy" +serviceworkerInfo: "Musà být zapnut pro push notifikace." deletedNote: "OdstranÄ›né 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" +describeFile: "PÅ™idat popisek" +enterFileDescription: "Vložit popisek" author: "Autor" +leaveConfirm: "Máte neuložené zmÄ›ny. Opravdu je chcete zahodit?" 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" height: "Výška" large: "Velké" @@ -465,10 +606,13 @@ generateAccessToken: "Vygenerovat pÅ™Ãstupový token" permission: "OprávnÄ›nÃ" enableAll: "Povolit 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Ã" edit: "Upravit" emailServer: "Mailový server" enableEmail: "Zapnout email dystribuci" +emailConfigInfo: "PoužÃvá se na ověřenà emailové adresy bÄ›hem registrace nebo pÅ™i zapomenutà hesla." email: "Email" emailAddress: "Emailová adresa" smtpConfig: "Konfigurace SMTP serveru" @@ -476,8 +620,15 @@ smtpHost: "Hostitel" smtpPort: "Port" smtpUser: "Uživatelské jméno" 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" 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" display: "Zobrazit" copy: "KopÃrovat" @@ -489,21 +640,66 @@ database: "Databáze" channel: "Kanály" create: "VytvoÅ™it" notificationSetting: "Nastavenà oznámenÃ" +notificationSettingDesc: "Vyberte typy oznámenà k zobrazenÃ." 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Ã" +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" behavior: "ChovánÃ" 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" 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Ä›" system: "Systém" +switchUi: "PÅ™epnout UI" desktop: "Plocha" clip: "OÅ™Ãznout" createNew: "VytvoÅ™it nový" 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" 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" emailVerified: "Váš e-mail byl ověřen" contact: "Kontakt" diff --git a/locales/en-US.yml b/locales/en-US.yml index ea82525513ed256ed9b09eaa6f128e347d5a5bbe..097aba76ba6a171d0febe16f639002bdf4da1c7f 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -1042,7 +1042,7 @@ vertical: "Vertical" horizontal: "Horizontal" position: "Position" 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." continue: "Continue" preservedUsernames: "Reserved usernames" @@ -1999,7 +1999,7 @@ _deck: 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." 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: main: "Main" widgets: "Widgets" diff --git a/locales/es-ES.yml b/locales/es-ES.yml index 127dc367e6fb83914f3a61aa4705cdc41a076d9a..99a0eea4e508bdd47b5c2ad01eb7d8954dfc1e20 100644 --- a/locales/es-ES.yml +++ b/locales/es-ES.yml @@ -1091,6 +1091,9 @@ usedAt: "Usada el" unused: "Sin usar" used: "Usada" 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: accountCreated: "¡La cuenta ha sido creada!" letsStartAccountSetup: "Para empezar, creemos tu perfil." diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index f76a26632df66e1950fd84bc9ec247177f992de9..526e80b2d36d1b1f90cbd49e0a6fc8dcd7768352 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -49,6 +49,7 @@ delete: "Supprimer" 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." addToList: "Ajouter à une liste" +addToAntenna: "Ajouter à l’antenne" sendMessage: "Envoyer un message" copyRSS: "Copier le RSS" copyUsername: "Copier le nom d’utilisateur·rice" @@ -57,10 +58,10 @@ copyNoteId: "Copier l'identifiant de la note" copyFileId: "Copier l'identifiant du fichier" copyFolderId: "Copier l'identifiant du dossier" copyProfileUrl: "Copier l'URL du profil" -searchUser: "Chercher un·e utilisateur·rice" +searchUser: "Chercher un utilisateur" reply: "Répondre" loadMore: "Afficher plus …" -showMore: "Afficher plus …" +showMore: "Voir plus" showLess: "Fermer" youGotNewFollower: "Vous suit" receiveFollowRequest: "Demande d’abonnement reçue" @@ -73,16 +74,16 @@ import: "Importer" export: "Exporter" files: "Fichiers" 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} ?" exportRequested: "Vous avez demandé une exportation. L’opé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." lists: "Listes" noLists: "Vous n’avez aucune liste" -note: "Notes" +note: "Note" notes: "Notes" following: "Abonnements" -followers: "Abonné·e·s" +followers: "Abonnés" followsYou: "Vous suit" createList: "Créer une liste" manageLists: "Gérer les listes" @@ -121,7 +122,7 @@ reaction: "Réactions" reactions: "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." -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é" markAsSensitive: "Marquer comme sensible" unmarkAsSensitive: "Supprimer le marquage comme sensible" diff --git a/locales/hu-HU.yml b/locales/hu-HU.yml new file mode 100644 index 0000000000000000000000000000000000000000..fdab9645c160ddb2346c32cc02b653f933a93827 --- /dev/null +++ b/locales/hu-HU.yml @@ -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" diff --git a/locales/id-ID.yml b/locales/id-ID.yml index 34c995b05eeedf77091aa44f5c3245151cbe7c65..c6ed07ebc9d06b970e3ea5fd4b49a11df832b083 100644 --- a/locales/id-ID.yml +++ b/locales/id-ID.yml @@ -49,11 +49,15 @@ delete: "Hapus" 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." addToList: "Tambahkan ke daftar" +addToAntenna: "Tambahkan ke Antena" sendMessage: "Kirim pesan" copyRSS: "Salin RSS" copyUsername: "Salin nama pengguna" copyUserId: "Salin ID pengguna" copyNoteId: "Salin ID catatan" +copyFileId: "Salin Berkas" +copyFolderId: "Salin Folder" +copyProfileUrl: "Salin Alamat Web Profil" searchUser: "Cari pengguna" reply: "Balas" loadMore: "Selebihnya" @@ -313,6 +317,7 @@ copyUrl: "Salin tautan" rename: "Ubah nama" avatar: "Avatar" banner: "Banner" +displayOfSensitiveMedia: "Tampilkan media NSFW" whenServerDisconnected: "Ketika kehilangan koneksi dengan peladen" disconnectedFromServer: "Terputus koneksi dari peladen" reload: "Muat ulang" @@ -1066,6 +1071,11 @@ installed: "Terpasang" branding: "Merek" enableServerMachineStats: "Tampilkan informasi mesin peladen menjadi publik" 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: accountCreated: "Akun kamu telah sukses dibuat!" letsStartAccountSetup: "Untuk pemula, ayo atur profilmu dulu." diff --git a/locales/it-IT.yml b/locales/it-IT.yml index 0df1fd64bf886e4200142b6f3b70d64f49ac8987..864918117e7095c93927cd27846d19c07537e5b6 100644 --- a/locales/it-IT.yml +++ b/locales/it-IT.yml @@ -621,10 +621,10 @@ smtpHost: "Server remoto" smtpPort: "Porta" smtpUser: "Nome utente" smtpPass: "Password" -emptyToDisableSmtpAuth: "Lasciare il nome utente e la password vuoti per disabilitare la verifica SMTP" -smtpSecure: "Usare la porta SSL/TLS implicito per le connessioni SMTP" +emptyToDisableSmtpAuth: "Lasciare i campi vuoti se non c'è autenticazione SMTP" +smtpSecure: "Usare SSL/TLS implicito per le connessioni SMTP" smtpSecureInfo: "Disabilitare quando è attivo STARTTLS." -testEmail: "Testa la consegna di posta elettronica" +testEmail: "Verifica il funzionamento" wordMute: "Filtri parole" regexpError: "errore regex" regexpErrorDescription: "Si è verificato un errore nell'espressione regolare alla riga {line} della parola muta {tab}:" @@ -1091,6 +1091,9 @@ usedAt: "Usato alle" unused: "Inutilizzato" used: "Utilizzato" expired: "Scaduto" +doYouAgree: "Sei d'accordo?" +beSureToReadThisAsItIsImportant: "Si prega di leggere attentamente perché è importante." +iHaveReadXCarefullyAndAgree: "Ho letto accuratamente \"{x}\" e sono d'accordo." _initialAccountSetting: accountCreated: "Il tuo profilo è stato creato!" letsStartAccountSetup: "Per iniziare, impostiamo il tuo profilo." @@ -1444,7 +1447,7 @@ _sensitiveMediaDetection: _emailUnavailable: used: "Email già in uso" format: "Formato email non valido" - disposable: "Email non riutilizzabile" + disposable: "Indirizzo email non utilizzabile" mx: "Server email non corretto" smtp: "Il server email non risponde" _ffVisibility: diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml index e8b02f8d5e4ba9e4840b6caae507bd967e25a8f2..80c810d26b3f8abb2f139c0d6349cb0df5a0eee2 100644 --- a/locales/ja-KS.yml +++ b/locales/ja-KS.yml @@ -49,11 +49,15 @@ delete: "ã»ã‹ã™" deleteAndEdit: "ã»ã‹ã—ã¦ç›´ã™" deleteAndEditConfirm: "ã“ã®ãƒŽãƒ¼ãƒˆã‚’ã»ã‹ã—ã¦ã‚‚ã£ã‹ã„ç›´ã™ï¼Ÿã“ã®ãƒŽãƒ¼ãƒˆã¸ã®ãƒ„ッコミã€Renoteã€è¿”信も全部消ãˆã‚‹ã‚“ã‚„ã‘ã©ãã‚Œã§ã‚‚ãˆãˆã‚“?" addToList: "リストã«å…¥ã‚ŒãŸã‚‹" +addToAntenna: "アンテナã«è¿½åŠ " sendMessage: "メッセージをé€ã‚‹" copyRSS: "RSSをコピー" copyUsername: "ユーザーåをコピー" copyUserId: "ユーザーIDをコピー" copyNoteId: "ノートIDをコピー" +copyFileId: "ファイルIDをコピー" +copyFolderId: "フォルダーIDをコピー" +copyProfileUrl: "プãƒãƒ•ã‚£ãƒ¼ãƒ«URLをコピー" searchUser: "ユーザーを検索" reply: "返事" loadMore: "ã¾ã ã¾ã ã‚ã‚‹ã§ï¼" @@ -152,6 +156,8 @@ addEmoji: "絵文å—ã‚’è¿½åŠ " settingGuide: "ãˆãˆæ„Ÿã˜ã®è¨å®š" cacheRemoteFiles: "リモートã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ã‚ャッシュã™ã‚‹" cacheRemoteFilesDescription: "ã“ã®è¨å®šã‚’切ã£ã¨ã£ãŸã‚‰ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’ã‚ャッシュã›ã‚“ã¨ç›´ãƒªãƒ³ã‚¯ã™ã‚‹ã‚ˆã†ã«ãªã‚‹ã§ã€‚サーãƒãƒ¼ã®å®¹é‡ã¯ç¯€ç´„ã§ãã‚‹ã‘ã©ã€ã‚µãƒ ãƒã‚¤ãƒ«ã‚’作らんãªã‚‹ã‹ã‚‰é€šä¿¡é‡ãŒå¢—ãˆã‚‹ã§ã€‚" +cacheRemoteSensitiveFiles: "リモートã®ã‚»ãƒ³ã‚·ãƒ†ã‚£ãƒ–ãªãƒ•ã‚¡ã‚¤ãƒ«ã‚’ã‚ャッシュã™ã‚‹" +cacheRemoteSensitiveFilesDescription: "ã“ã®è¨å®šã‚’無効ã«ã™ã‚‹ã¨ã€ãƒªãƒ¢ãƒ¼ãƒˆã®ã‚»ãƒ³ã‚·ãƒ†ã‚£ãƒ–ãªãƒ•ã‚¡ã‚¤ãƒ«ã¯ã‚ャッシュã›ãšç›´ãƒªãƒ³ã‚¯ã™ã‚‹ã‚ˆã†ã«ãªã‚‹ã§ã€‚" flagAsBot: "Botã«ã™ã‚‹ã§" flagAsBotDescription: "ã‚‚ã—ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’プãƒã‚°ãƒ©ãƒ 使ã†ã¦é‹ç”¨ã™ã‚‹ã‚“ã‚„ã£ãŸã‚‰ã€ã“ã®ãƒ•ãƒ©ã‚°ã‚’オンã«ã—ã¦ã‚„。オンã«ã™ã‚Œã°ã€åå¿œãŒãƒãƒ¼ãƒƒã¦é€£éŽ–ã›ã‚“よã†ã«é–‹ç™ºè€…ãŒä½¿ã†ãŸã‚Šã€Misskeyã®ã‚·ã‚¹ãƒ†ãƒ 上ã§ã®æ‰±ã„ãŒBotã«åˆã£ãŸã‚‚ã‚“ã«ãªã‚‹ã‹ã‚‰ãªã€‚" flagAsCat: "Catã‚„ã§" @@ -313,6 +319,7 @@ copyUrl: "URLをコピー" rename: "åå‰ã‚’変ãˆã‚‹ã§" avatar: "アイコン" banner: "ãƒãƒŠãƒ¼" +displayOfSensitiveMedia: "センシティブãªãƒ¡ãƒ‡ã‚£ã‚¢ã®è¡¨ç¤º" whenServerDisconnected: "サーãƒãƒ¼ã¨ã®æŽ¥ç¶šãŒå¤±ããªã£ã¦ã—ã‚‚ã†ãŸã¨ã" disconnectedFromServer: "サーãƒãƒ¼ãŒæ©Ÿå«Œæ‚ªã„ãã‚“" reload: "リãƒãƒ¼ãƒ‰" @@ -1067,11 +1074,26 @@ branding: "ã‚" enableServerMachineStats: "サーãƒãƒ¼ã®ãƒžã‚·ãƒ³æƒ…å ±è¦‹ã›ã³ã‚‰ã‹ã™ã§" enableIdenticonGeneration: "ユーザーã”ã¨ã®Identicon生æˆã‚’有効ã«ã™ã‚‹" turnOffToImprovePerformance: "オフã«ã—ãŸã‚‰ãˆã‚‰ã„軽ã†ãªã‚‹ã§ã€‚" +createInviteCode: "招待コードを作æˆ" +createWithOptions: "オプションを指定ã—ã¦ä½œæˆ" +createCount: "作æˆæ•°" inviteCodeCreated: "招待コード作ã£ãŸã§" inviteLimitExceeded: "招待コード作りã™ãŽã‚„ã§ã€‚" createLimitRemaining: "作æˆã§ãる招待コード: 残り {limit} 個やã§" +inviteLimitResetCycle: "{time}ã§æœ€å¤§ {limit} 個ã®æ‹›å¾…コードを作æˆã§ãã‚‹ã§ã€‚" +expirationDate: "有効期é™" +noExpirationDate: "有効期é™ã‚’è¨ã‘ã¸ã‚“" +inviteCodeUsedAt: "招待コードãŒä½¿ç”¨ã•ã‚ŒãŸæ—¥æ™‚" +registeredUserUsingInviteCode: "招待コードを使用ã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼" +waitingForMailAuth: "メールèªè¨¼å¾…ã¡" +inviteCodeCreator: "招待コードを作æˆã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼" +usedAt: "使用日時" unused: "ã¤ã“ã¦ã¸ã‚“" used: "ã‚‚ã†ã¤ã“ã¦ã‚‹" +expired: "期é™åˆ‡ã‚Œ" +doYouAgree: "åŒæ„ã™ã‚‹ã‚“ã‹ï¼Ÿ" +beSureToReadThisAsItIsImportant: "é‡è¦ã‚„ã‹ã‚‰çµ¶å¯¾èªã‚“ã§ã‚„。" +iHaveReadXCarefullyAndAgree: "「{x}ã€ã®å†…容をよã†èªã‚“ã§ã€åŒæ„ã™ã‚‹ã§ã€‚" _initialAccountSetting: accountCreated: "アカウント作り終ã‚ã£ãŸã§ã€‚" letsStartAccountSetup: "アカウントã®åˆæœŸè¨å®šã‚’ã—よã‹ã€‚" @@ -1382,6 +1404,9 @@ _role: ltlAvailable: "ãƒãƒ¼ã‚«ãƒ«ã‚¿ã‚¤ãƒ ラインã®é–²è¦§" canPublicNote: "パブリック投稿ã®è¨±å¯" canInvite: "サーãƒãƒ¼æ‹›å¾…コードã®ç™ºè¡Œ" + inviteLimit: "招待コードã®ä½œæˆå¯èƒ½æ•°" + inviteLimitCycle: "招待コードã®ç™ºè¡Œé–“éš”" + inviteExpirationTime: "招待コードã®æœ‰åŠ¹æœŸé™" canManageCustomEmojis: "カスタム絵文å—ã®ç®¡ç†" driveCapacity: "ドライブ容é‡" alwaysMarkNsfw: "å‹æ‰‹ã«ãƒ•ã‚¡ã‚¤ãƒ«ã«NSFWã‚’ãã£ã¤ã‘ã‚‹" @@ -1444,6 +1469,7 @@ _ad: back: "戻る" reduceFrequencyOfThisAd: "ã“ã®åºƒå‘Šã®è¡¨ç¤ºé »åº¦ã‚’下ã’ã‚‹ã§" hide: "表示ã›ã‚“" + timezoneinfo: "曜日ã¯ã‚µãƒ¼ãƒãƒ¼ã®ã‚¿ã‚¤ãƒ ゾーンを元ã«æŒ‡å®šã•ã‚Œã‚‹ã§ã€‚" _forgotPassword: enterEmail: "アカウントã«ç™»éŒ²ã—ãŸãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’ã“ã“ã«å…¥åŠ›ã—ã¦ã‚„。ãã®ã‚¢ãƒ‰ãƒ¬ã‚¹å®›ã«ã€ãƒ‘スワードリセット用ã®ãƒªãƒ³ã‚¯ãŒé€ã‚‰ã‚Œã‚‹ã‹ã‚‰å¾…ã£ã¦ã¦ãªï½žã€‚" ifNoEmail: "メールアドレスを登録ã—ã¦ã¸ã‚“ã®ã‚„ã£ãŸã‚‰ã€ç®¡ç†è€…ã¾ã§æ•™ãˆã¦ãªï½žã€‚" @@ -1973,6 +1999,7 @@ _deck: introduction: "カラムを組ã¿åˆã‚ã›ã¦è‡ªåˆ†ã ã‘ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’作りã¾ã—ょï¼" introduction2: "ç”»é¢ã®å³ã«ã‚ã‚‹ + を押ã—ã¦ã€ã„ã¤ã§ã‚‚ã‚«ãƒ©ãƒ ã‚’è¿½åŠ ã§ãã‚‹ã§ã€‚" widgetsIntroduction: "カラムã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰ã€ã€Œã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã®ç·¨é›†ã€ã‚’é¸ã‚“ã§ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã‚’è¿½åŠ ã—ã¦ãªãƒ¼" + useSimpleUiForNonRootPages: "éžãƒ«ãƒ¼ãƒˆãƒšãƒ¼ã‚¸ã¯ç°¡æ˜“UIã§è¡¨ç¤º" _columns: main: "メイン" widgets: "ウィジェット" diff --git a/locales/pt-PT.yml b/locales/pt-PT.yml index 29d7de19c26fd78943487a35b5ad0060bf21b0df..18fe955eae99192450439023dbb7df3d7241809a 100644 --- a/locales/pt-PT.yml +++ b/locales/pt-PT.yml @@ -1,7 +1,8 @@ --- _lang_: "Português" headlineMisskey: "Uma rede ligada por notas" -introMisskey: "Bem-vindo! Misskey é um serviço de microblogue descentralizado de código aberto.\nCria \"notas\" e partilha o que te ocorre com todos à tua volta. 📡\nCom \"reações\" podes também expressar logo o que sentes à s notas de todos. ðŸ‘\nExploremos um novo mundo! 🚀" +introMisskey: "Bem-vindo! O Misskey é um serviço de microblog descentralizado de código aberto.\nCrie \"notas\" para compartilhar o que está acontecendo agora ou para se expressar com todos à sua volta 📡\nVocê também pode adicionar rapidamente reações à s notas de outras pessoas usando a função \"Reações\" ðŸ‘\nVamos explorar um novo mundo 🚀" +poweredByMisskeyDescription: "{name} é um dos servidores da plataforma de código aberto <b>Misskey</b>." monthAndDay: "{day}/{month}" search: "Buscar" notifications: "Notificações" @@ -12,15 +13,17 @@ fetchingAsApObject: "Buscando no Fediverso" ok: "OK" gotIt: "Entendi" cancel: "Cancelar" +noThankYou: "Não, obrigado" enterUsername: "Digite o nome de usuário" renotedBy: "Repostado por {user}" -noNotes: "Sem posts" +noNotes: "Sem notas" noNotifications: "Sem notificações" instance: "Instância" settings: "Configurações" +notificationSettings: "Configurações de notificação" basicSettings: "Configurações básicas" otherSettings: "Outras configurações" -openInWindow: "Abrir numa janela" +openInWindow: "Abrir em um janela" profile: "Perfil" timeline: "Timeline" noAccountDescription: "Este usuário não tem uma descrição." @@ -32,8 +35,8 @@ uploading: "Enviando…" save: "Guardar" users: "Usuários" addUser: "Adicionar usuário" -favorite: "Favoritar" -favorites: "Favoritar" +favorite: "Adicionar aos favoritos" +favorites: "Adicionar aos favoritos" unfavorite: "Remover dos favoritos" favorited: "Adicionado aos favoritos." alreadyFavorited: "Já adicionado aos favoritos." @@ -41,93 +44,107 @@ cantFavorite: "Não foi possÃvel adicionar aos favoritos." pin: "Afixar no perfil" unpin: "Desafixar do perfil" copyContent: "Copiar conteúdos" -copyLink: "Copiar hiperligação" -delete: "Eliminar" -deleteAndEdit: "Eliminar e editar" -deleteAndEditConfirm: "Tens a certeza que pretendes eliminar esta nota e editá-la? Irás perder todas as suas reações, renotas e respostas." +copyLink: "Copiar link" +delete: "Excluir" +deleteAndEdit: "Excluir e editar" +deleteAndEditConfirm: "Deseja excluir esta nota e editá-la novamente? Todas as reações, compartilhamentos e respostas a esta nota também serão excluÃdas." addToList: "Adicionar a lista" +addToAntenna: "Adicionar à antena" sendMessage: "Enviar uma mensagem" +copyRSS: "Copiar RSS" copyUsername: "Copiar nome de utilizador" -searchUser: "Pesquisar utilizador" +copyUserId: "Copiar o ID do utilizador" +copyNoteId: "Copiar o ID da publicação" +copyFileId: "Copiar o ID do arquivo" +copyFolderId: "Copiar o ID da pasta" +copyProfileUrl: "Copiar a URL do perfil" +searchUser: "Pesquisar usuário" reply: "Responder" loadMore: "Carregar mais" showMore: "Ver mais" showLess: "Fechar" youGotNewFollower: "Você tem um novo seguidor" -receiveFollowRequest: "Pedido de seguimento recebido" -followRequestAccepted: "Pedido de seguir aceito" +receiveFollowRequest: "Pedido de seguidor recebido" +followRequestAccepted: "Pedido de seguidor aceito" mention: "Menção" mentions: "Menções" directNotes: "Notas diretas" importAndExport: "Importar/Exportar" import: "Importar" export: "Exportar" -files: "Ficheiros" +files: "Arquivos" download: "Descarregar" -driveFileDeleteConfirm: "Tens a certeza que pretendes apagar o ficheiro \"{name}\"? As notas que tenham este ficheiro anexado serão também apagadas." -unfollowConfirm: "Tens a certeza que queres deixar de seguir {name}?" -exportRequested: "Pediste uma exportação. Este processo pode demorar algum tempo. Será adicionado à tua Drive após a conclusão do processo." -importRequested: "Pediste uma importação. Este processo pode demorar algum tempo." +driveFileDeleteConfirm: "Deseja excluir o arquivo '{name}'? Qualquer conteúdo que use este arquivo também será removido." +unfollowConfirm: "Gostaria de deixar de seguir {name}?" +exportRequested: "A sua solicitação de exportação foi enviada. Isso pode levar algum tempo. Assim que a exportação estiver concluÃda, ela será adicionada ao seu drive." +importRequested: "A sua solicitação de importação foi enviada. Isso pode levar algum tempo." lists: "Listas" -noLists: "Não tens nenhuma lista" +noLists: "Não possui nenhuma lista" note: "Post" notes: "Posts" following: "Seguindo" followers: "Seguidores" -followsYou: "Segue-te" +followsYou: "Te seguem" createList: "Criar lista" -manageLists: "Gerir listas" +manageLists: "Gerenciar listas" error: "Erro" somethingHappened: "Ocorreu um erro" retry: "Tentar novamente" pageLoadError: "Ocorreu um erro ao carregar a página." -pageLoadErrorDescription: "Isto é normalmente causado por erros de rede ou pela cache do browser. Experimenta limpar a cache e tenta novamente após algum tempo." -serverIsDead: "O servidor não está respondendo. Por favor espere um pouco e tente novamente." -youShouldUpgradeClient: "Para visualizar essa página, por favor recarregue-a para atualizar seu cliente." +pageLoadErrorDescription: "Isso geralmente acontece devido ao cache do navegador ou da rede. Tente limpar o cache ou aguarde um pouco antes de tentar novamente." +serverIsDead: "Não há resposta do servidor. Aguarde um momento e tente novamente." +youShouldUpgradeClient: "Para visualizar esta página, recarregue-a e utilize a nova versão do cliente." enterListName: "Insira um nome para a lista" privacy: "Privacidade" -makeFollowManuallyApprove: "Pedidos de seguimento precisam ser aprovados" +makeFollowManuallyApprove: "Pedidos de seguidores precisam ser aprovados" defaultNoteVisibility: "Visibilidade padrão" follow: "Seguindo" -followRequest: "Mandar pedido de seguimento" -followRequests: "Pedidos de seguimento" +followRequest: "Enviar pedido de seguidor" +followRequests: "Pedidos de seguidor" unfollow: "Deixar de seguir" -followRequestPending: "Pedido de seguimento pendente" +followRequestPending: "Pedido de seguidor pendente" enterEmoji: "Inserir emoji" renote: "Repostar" -unrenote: "Desmarcar" +unrenote: "Remover repostagem" renoted: "Repostado" -cantRenote: "Não pode repostar" +cantRenote: "Não é possÃvel repostar esta postagem" cantReRenote: "Não pode repostar este repost" quote: "Citar" -pinnedNote: "Post fixado" -pinned: "Afixar no perfil" +inChannelRenote: "Repostar no canal" +inChannelQuote: "Citar no canal" +pinnedNote: "Nota fixada" +pinned: "Fixar no perfil" you: "Você" clickToShow: "Clique para ver" sensitive: "Conteúdo sensÃvel" add: "Adicionar" reaction: "Reações" reactions: "Reações" -reactionSetting: "Quais reações a mostrar no selecionador de reações" +reactionSetting: "Quais reações exibir no seletor de reações" reactionSettingDescription2: "Arraste para reordenar, clique para excluir, pressione + para adicionar." rememberNoteVisibility: "Lembrar das configurações de visibilidade de notas" attachCancel: "Remover anexo" markAsSensitive: "Marcar como sensÃvel" unmarkAsSensitive: "Desmarcar como sensÃvel" -enterFileName: "Digite o nome do ficheiro" -mute: "Silenciar" -unmute: "Dessilenciar" +enterFileName: "Digite o nome do arquivo" +mute: "Mutar" +unmute: "Desmutar" +renoteMute: "Mutar repostagens" +renoteUnmute: "Reativar repostagens" block: "Bloquear" unblock: "Desbloquear" suspend: "Suspender" unsuspend: "Cancelar suspensão" -blockConfirm: "Tem certeza que gostaria de bloquear essa conta?" -unblockConfirm: "Tem certeza que gostaria de desbloquear essa conta?" -suspendConfirm: "Tem certeza que gostaria de suspender essa conta?" -unsuspendConfirm: "Tem certeza que gostaria de cancelar a suspensão dessa conta?" -selectList: "Escolhe uma lista" -selectAntenna: "Escolhe uma antena" -selectWidget: "Escolhe um widget" +blockConfirm: "Tem certeza que gostaria de bloquear esta conta?" +unblockConfirm: "Tem certeza que gostaria de desbloquear esta conta?" +suspendConfirm: "Tem certeza que gostaria de suspender esta conta?" +unsuspendConfirm: "Tem certeza que gostaria de cancelar a suspensão desta conta?" +selectList: "Selecione uma lista" +editList: "Editar lista" +selectChannel: "Selecionar canal" +selectAntenna: "Selecione uma antena" +editAntenna: "Editar antena" +selectWidget: "Selecione um widget" editWidgets: "Editar widgets" editWidgetsExit: "Pronto" customEmojis: "Emoji personalizado" @@ -137,17 +154,20 @@ emojiName: "Nome do Emoji" emojiUrl: "URL do Emoji" addEmoji: "Adicionar um Emoji" settingGuide: "Guia de configuração" -cacheRemoteFiles: "Memória transitória de arquivos remotos" -cacheRemoteFilesDescription: "Se você desabilitar essa configuração, os arquivos remotos não serão armazenados em memória transitória e serão vinculados diretamente. Economiza o armazenamento do servidor, mas não gera miniaturas, o que aumenta o tráfego." +cacheRemoteFiles: "Cache de arquivos remotos" +cacheRemoteFilesDescription: "Ao desativar esta configuração, os arquivos remotos não serão mais armazenados em cache e serão vinculados diretamente. Isso economizará espaço de armazenamento no servidor, mas os thumbnails não serão gerados, o que pode aumentar o tráfego de dados." +cacheRemoteSensitiveFiles: "Fazer cache de arquivos remotos sensÃveis" +cacheRemoteSensitiveFilesDescription: "Desativar essa configuração faz com que arquivos remotos sensÃveis sejam vinculados diretamente em vez de armazenados em cache." flagAsBot: "Marcar conta como robô" -flagAsBotDescription: "Se esta conta for operada por um programa, ative este sinalizador. Quando ativado, serve como um sinalizador para evitar o encadeamento de reações para outros programadores, e o manuseio do sistema do Misskey é adequado para ‘bots’." +flagAsBotDescription: "Se esta conta for operada por uma aplicação, ative esta opção. Ao ativá-la, ela servirá como um sinalizador para evitar reações em cadeia e ajudar outros desenvolvedores. Além disso, ajustará o tratamento da conta no sistema do Misskey para que se adeque a um Bot." flagAsCat: "Marcar conta como gato" -flagAsCatDescription: "Ative essa opção para marcar essa conta como gato." +flagAsCatDescription: "Ative esta opção para marcar essa conta como gato" flagShowTimelineReplies: "Mostrar respostas na linha de tempo" flagShowTimelineRepliesDescription: "Quando ativado, a linha do tempo mostra as respostas à s outras notas do utilizador, além da nota do utilizador." autoAcceptFollowed: "Aprove automaticamente os seguidores dos seguintes utilizadores" addAccount: "Adicionar Conta" -loginFailed: "Não consegui logar" +reloadAccountsList: "Recarregar lista de contas" +loginFailed: "Falha ao logar" showOnRemote: "Exibir remotamente" general: "Geral" wallpaper: "Papel de parede" @@ -157,101 +177,106 @@ searchWith: "Buscar: {q}" youHaveNoLists: "Não tem nenhuma lista" followConfirm: "Tem certeza que quer deixar de seguir {name}?" proxyAccount: "Conta proxy" -proxyAccountDescription: "Uma conta proxy é uma conta que atua como seguidora remota para utilizadores sob determinadas condições. Por exemplo, quando um utilizador lista um utilizador remoto, a atividade não será entregue à instância, a menos que alguém esteja seguindo o utilizador listado, portanto, a conta proxy deve seguir." -host: "hospedeiro" -selectUser: "Selecionar utilizador" -recipient: "Morada" +proxyAccountDescription: "Uma conta de proxy é uma conta que assume o acompanhamento remoto de um usuário sob certas condições especÃficas. Por exemplo, quando um usuário inclui um usuário remoto em uma lista, mas ninguém na lista está seguindo o usuário remoto, a atividade não é entregue ao servidor. Nesse caso, a conta de proxy entra em ação para seguir o usuário remoto em vez disso." +host: "Host" +selectUser: "Selecionar usuário" +recipient: "Destinatário" annotation: "Anotação" -federation: "União" -instances: "Instância" +federation: "Federação" +instances: "Instâncias" registeredAt: "Registrado em" -latestRequestReceivedAt: "Recebeu a última solicitação" +latestRequestReceivedAt: "Última solicitação recebida" latestStatus: "Status mais recente" storageUsage: "Uso de armazenamento" -charts: "gráfico" -perHour: "por hora" -perDay: "por dia" +charts: "Gráfico" +perHour: "Por Hora" +perDay: "Por dia" stopActivityDelivery: "Parar a entrega de atividades" blockThisInstance: "Bloquear esta instância" -operations: "operar" -software: "Programas" -version: "versão" +operations: "Operações" +software: "Software" +version: "Versão" metadata: "Metadados" -withNFiles: "{n} Um arquivo" +withNFiles: "{n} arquivo(s)" monitor: "monitor" -jobQueue: "Fila de trabalhos" +jobQueue: "Fila de tarefas" cpuAndMemory: "CPU e memória" -network: "rede" -disk: "disco" +network: "Rede" +disk: "Disco" instanceInfo: "Informações da instância" -statistics: "Estatisticas" +statistics: "EstatÃsticas" clearQueue: "Limpar a fila" -clearQueueConfirmTitle: "Quer limpar a fila?" -clearQueueConfirmText: "Postagens não entregues não serão mais entregues. Normalmente você não precisa fazer isso." -clearCachedFiles: "Limpar memória transitória" -clearCachedFilesConfirm: "Tem certeza de que deseja excluir todos os arquivos remotos armazenados em memória transitória?" +clearQueueConfirmTitle: "Deseja limpar a fila?" +clearQueueConfirmText: "As postagens não entregues deixarão de ser enviadas. Geralmente, não é necessário realizar essa operação." +clearCachedFiles: "Limpar o cache" +clearCachedFilesConfirm: "Deseja excluir todos os arquivos remotos em cache?" blockedInstances: "Instância bloqueada" -blockedInstancesDescription: "Defina os anfitriões das instâncias que deseja bloquear, separados por quebras de linha. Uma instância bloqueada não poderá interagir com esta instância." +blockedInstancesDescription: "Configure os hosts dos servidores que deseja bloquear, separando-os por quebras de linha. Os servidores bloqueados não poderão interagir com este servidor, incluindo os subdomÃnios." muteAndBlock: "Silenciar e bloquear" -mutedUsers: "Silenciar utilizador" -blockedUsers: "Utilizadores bloqueados" +mutedUsers: "Usuários silenciados" +blockedUsers: "Usuários bloqueados" noUsers: "Sem usuários" editProfile: "Editar Perfil" noteDeleteConfirm: "Deseja excluir esta nota?" -pinLimitExceeded: "Não consigo mais fixar" +pinLimitExceeded: "Não é possÃvel fixar novas notas" intro: "A instalação do Misskey está completa! Crie uma conta de administrador." done: "ConcluÃdo" processing: "Em Progresso" preview: "Pré-visualizar" -default: "Padrão" +default: "Predefinição" +defaultValueIs: "Predefinição: {value}" noCustomEmojis: "Não há emojis" -noJobs: "Sem trabalho" -federating: "federar" +noJobs: "Não há tarefas" +federating: "Federando" blocked: "Bloqueado" -suspended: "Cancelar subscrição" +suspended: "Suspenso" all: "Todos" subscribing: "Subscrito" -publishing: "Executando" +publishing: "Publicando" notResponding: "Sem resposta" instanceFollowing: "Seguir a instância" instanceFollowers: "Seguidores da instância" -instanceUsers: "Utilizador da instância" +instanceUsers: "Usuários da instância" changePassword: "Mudar senha" security: "Segurança" -retypedNotMatch: "As entradas não coincidem." -currentPassword: "Palavra-passe atual" -newPassword: "Nova palavra-passe" -newPasswordRetype: "Nova senha (redigite)" +retypedNotMatch: "As informações inseridas não coincidem." +currentPassword: "Senha atual" +newPassword: "Nova senha" +newPasswordRetype: "Nova senha (digite novamente)" attachFile: "Anexar arquivo" more: "Mais!" featured: "Destaques" -usernameOrUserId: "Nome de utilizador ou ID de utilizador" -noSuchUser: "Utilizador não encontrado" +usernameOrUserId: "Nome de usuário ou ID do usuário" +noSuchUser: "Usuário não encontrado" lookup: "Buscando" -announcements: "NotÃcia" +announcements: "Avisos" imageUrl: "URL da imagem" -remove: "Eliminar" -removed: "Foi deletado" +remove: "Remover" +removed: "Removido" removeAreYouSure: "Deseja excluir \"{x}\"?" deleteAreYouSure: "Deseja excluir \"{x}\"?" -resetAreYouSure: "Redefinir agora?" +resetAreYouSure: "Deseja reiniciar?" saved: "Salvo" messaging: "Chat" -upload: "Enviando" +upload: "Fazer upload" keepOriginalUploading: "Manter a imagem original" -keepOriginalUploadingDescription: "Mantenha a versão original ao carregar a imagem. Quando desligado, a imagem para publicação na web será gerada no navegador no momento do upload." -fromDrive: "\nDa unidade" +keepOriginalUploadingDescription: "Ao fazer o upload de uma imagem, ela será mantida em sua versão original. Caso desative esta opção, o navegador irá gerar uma versão da imagem otimizada para publicação na web durante o upload." +fromDrive: "Do drive" fromUrl: "Da URL" -uploadFromUrl: "Carregamento de URL" +uploadFromUrl: "Enviar por URL" uploadFromUrlDescription: "URL do arquivo que você deseja enviar" uploadFromUrlRequested: "Upload solicitado" uploadFromUrlMayTakeTime: "Pode levar algum tempo para que o upload seja concluÃdo." explore: "Explorar" messageRead: "Lida" -noMoreHistory: "Sem mais história" +noMoreHistory: "Não existe histórico anterior" startMessaging: "Iniciar conversação" nUsersRead: "{n} Pessoas leem" agreeTo: "Eu concordo com {0}" +agree: "Concordar" +agreeBelow: "Eu concordo com o seguinte" +basicNotesBeforeCreateAccount: "Observações importantes" +termsOfService: "Termos de Uso" start: "começar" home: "casa" remoteUserCaution: "As informações estão incompletas porque é um utilizador remoto." @@ -280,11 +305,11 @@ renameFile: "Renomear ficheiro" folderName: "Nome da pasta" createFolder: "Criar pasta" renameFolder: "Renomear Pasta" -deleteFolder: "Eliminar Pasta" +deleteFolder: "Excluir pasta" addFile: "Adicionar arquivo" -emptyDrive: "A unidade está vazia" +emptyDrive: "O drive está vazio" emptyFolder: "A pasta está vazia" -unableToDelete: "Não é possÃvel eliminar" +unableToDelete: "Não é possÃvel excluir" inputNewFileName: "Por favor, digite um novo nome para a pasta!" inputNewDescription: "Insira uma nova legenda" inputNewFolderName: "Por favor, digite um novo nome para a pasta!" @@ -294,6 +319,7 @@ copyUrl: "Copiar URL" rename: "Renomear" avatar: "Avatar" banner: "Capa" +displayOfSensitiveMedia: "Exibição de mÃdia sensÃvel" whenServerDisconnected: "Quando a conexão com o servidor é perdida" disconnectedFromServer: "Desconectado do servidor" reload: "Recarregar" @@ -325,8 +351,8 @@ disablingTimelinesInfo: "Se você desabilitar essas linhas do tempo, administrad registration: "Registar" enableRegistration: "Permitir que qualquer pessoa se registre" invite: "Convidar" -driveCapacityPerLocalAccount: "Capacidade da unidade por utilizador local" -driveCapacityPerRemoteAccount: "Capacidade da unidade por utilizador remoto" +driveCapacityPerLocalAccount: "Capacidade do drive por usuário local" +driveCapacityPerRemoteAccount: "Capacidade do drive por usuário remoto" inMb: "Em ‘megabytes’" iconUrl: "URL da imagem do Ãcone (favicon, etc.)" bannerUrl: "URL da imagem do ‘banner’" @@ -346,6 +372,8 @@ recaptcha: "reCAPTCHA" enableRecaptcha: "Habilitar reCAPTCHA" recaptchaSiteKey: "Chave do sÃtio ‘web’" recaptchaSecretKey: "Chave secreta" +turnstile: "Controle de acesso" +enableTurnstile: "Ativar controle de acesso" turnstileSiteKey: "Chave do sÃtio ‘web’" turnstileSecretKey: "Chave secreta" avoidMultiCaptchaConfirm: "O uso de vários captchas pode causar interferência. Deseja desativar outros captchas? Você também pode cancelar e deixar vários captchas ativados." @@ -381,12 +409,19 @@ about: "Informações" aboutMisskey: "Sobre Misskey" administrator: "Administrador" token: "SÃmbolo" +2fa: "Autenticação de dois fatores" +totp: "Aplicativo Autenticador" +totpDescription: "Digite a senha de uso único informado pelo aplicativo autenticador" moderator: "Moderador" +moderation: "Moderação" nUsersMentioned: "Postado por {n} pessoas" +securityKeyAndPasskey: "Chave de segurança / Chave de acesso" securityKey: "Chave de segurança" lastUsed: "Último uso" +lastUsedAt: "Última utilização: {t}" unregister: "Cancelar registro" passwordLessLogin: "Entrar sem senha" +passwordLessLoginDescription: "Faça login apenas com uma chave de segurança / chave de acesso sem utilização de senha" resetPassword: "Redefinir senha" newPasswordIs: "A nova senha é \"{password}\"" reduceUiAnimation: "Reduzir a animação da ‘interface’ do utilizador" @@ -402,14 +437,58 @@ help: "Ajuda" inputMessageHere: "Escrever mensagem aqui" close: "Fechar" invites: "Convidar" +members: "Membros" +transfer: "Transferência" +title: "TÃtulo" +text: "Texto" +enable: "Habilitar" +next: "Seguinte" +retype: "Digite novamente" +noteOf: "Publicação de {user}" +quoteAttached: "Com citação" +quoteQuestion: "Anexar como citação?" +noMessagesYet: "Sem conversas até o momento" +newMessageExists: "Há uma nova mensagem" +onlyOneFileCanBeAttached: "Apenas um arquivo pode ser anexado a uma mensagem" +signinRequired: "É necessário se inscrever ou fazer login antes de continuar" invitations: "Convidar" +invitationCode: "Código de convite" +checking: "Verificando..." +available: "DisponÃvel" +unavailable: "Não disponÃvel" +usernameInvalidFormat: "Pode utilizar letras maiúsculas e minúsculas, números e sublinhado (_)" +tooShort: "Muito curto" +tooLong: "Muito longo" +weakPassword: "Senha fraca" +normalPassword: "Senha normal" +strongPassword: "Senha forte" +passwordMatched: "As senhas coincidem" +passwordNotMatched: "As senhas não coincidem" +signinWith: "Faça login com {x}" +signinFailed: "Não foi possÃvel fazer login. Por favor, verifique o nome de usuário e a senha." +or: "Ou" +language: "Idioma" +uiLanguage: "Idioma de exibição da interface " +aboutX: "Sobre {x}" +emojiStyle: "Estilo de emojis" +native: "Nativo" +disableDrawer: "Não mostrar o menu em formato de gaveta" +showNoteActionsOnlyHover: "Exibir as ações da nota somente ao passar o cursor sobre ela" +noHistory: "Ainda não há histórico" +signinHistory: "Histórico de acesso" +enableAdvancedMfm: "Habilitar MFM avançado" +enableAnimatedMfm: "Habilitar MFM animado" +doing: "Processando..." +category: "Categoria" tags: "Etiquetas" docSource: "Fonte deste documento" createAccount: "Criar conta" existingAccount: "Contas existentes" regenerate: "Gerar novamente" fontSize: "Tamanho do texto" -noFollowRequests: "Não há aplicação de acompanhamento" +mediaListWithOneImageAppearance: "Altura da lista de mÃdias com apenas uma imagem" +limitTo: "Até {x}" +noFollowRequests: "Não há pedidos de seguidor pendentes" openImageInNewTab: "Abrir a imagem numa nova aba" dashboard: "Painel de controle" local: "Local" @@ -433,8 +512,8 @@ objectStorageBucket: "Bucket" objectStorageBucketDesc: "Especifique o nome do bucket do serviço a ser usado." objectStoragePrefix: "Prefixo" objectStoragePrefixDesc: "Ele é armazenado neste diretório de prefixo." -objectStorageEndpoint: "Ponto final" -objectStorageEndpointDesc: "Especifique vazio para S3, caso contrário, especifique o ponto final para cada serviço. Especifique como'<host>'ou'<host>: <port>'." +objectStorageEndpoint: "Endpoint" +objectStorageEndpointDesc: "No caso do S3, deixe em branco; para outros serviços, especifique o endpoint de cada serviço. Informe-o no formato '<host>' ou '<host>:<port>'." objectStorageRegion: "Região" objectStorageRegionDesc: "Especifique uma região como 'xx-east-1'. Caso seu serviço não tenha o conceito de região, ele deve estar vazio ou 'us-east-1'." objectStorageUseSSL: "Usar SSL" @@ -442,9 +521,11 @@ objectStorageUseSSLDesc: "Desative-o se não quiser usar https para conexões de objectStorageUseProxy: "Usar proxy" objectStorageUseProxyDesc: "Se você não usa proxy para conexão de API, desative-o." objectStorageSetPublicRead: "Definir 'public-read' ao fazer o upload" +s3ForcePathStyleDesc: "Ao habilitar s3ForcePathStyle, o nome do bucket é especificado como parte do caminho em vez de ser o nome do host na URL. Isso pode ser necessário ao usar serviços auto-hospedados como o Minio." serverLogs: "Registro do servidor" -deleteAll: "Apagar Tudo" +deleteAll: "Excluir tudo" showFixedPostForm: "Exibir o formulário de postagem na parte superior da linha do tempo" +showFixedPostFormInChannel: "Exibir o campo de postagem na parte superior da linha do tempo (canais)" newNoteRecived: "Nova nota recebida" sounds: "Sons" sound: "Sons" @@ -455,45 +536,638 @@ popout: "Sair" volume: "Volume" masterVolume: "volume principal" details: "Detalhes" +chooseEmoji: "Selecione um emoji" +unableToProcess: "Não é possÃvel concluir a operação" +recentUsed: "Usado recentemente" +install: "Instalar" +uninstall: "Desinstalar" +installedApps: "Aplicativos instalados" +nothing: "Não há nada aqui" +installedDate: "Data de instalação" +lastUsedDate: "Data de última utilização" +state: "Estado" +sort: "Ordenação" +ascendingOrder: "Ascendente" +descendingOrder: "Descendente" +scratchpad: "Bloco de rascunho" +scratchpadDescription: "O Bloco de rascunho fornece um ambiente experimental para AiScript. Permite escrever, executar e verificar os resultados do código para interagir com o Misskey." output: "Resultado" -smtpHost: "hospedeiro" +script: "Script" +disablePagesScript: "Desabilitar scripts nas páginas" +updateRemoteUser: "Atualizar informações do usuário remoto" +deleteAllFiles: "Excluir todos os arquivos" +deleteAllFilesConfirm: "Deseja excluir todos os arquivos?" +removeAllFollowing: "Deseja remover todos os seguidores?" +removeAllFollowingDescription: "Deixar de seguir todos de {host}. Faça isso se, por exemplo, o servidor não existir mais." +userSuspended: "Este usuário foi suspenso." +userSilenced: "Este usuário está silenciado." +yourAccountSuspendedTitle: "Esta conta está suspensa" +yourAccountSuspendedDescription: "Esta conta foi suspensa devido a violações dos termos de uso do servidor ou por outros motivos. Para mais detalhes, entre em contato com o administrador. Por favor, não crie uma nova conta." +tokenRevoked: "Token inválido" +tokenRevokedDescription: "Seu token de login expirou. Por favor, faça login novamente." +accountDeleted: "A conta foi removida" +accountDeletedDescription: "Esta conta foi removida." +menu: "Menu\n" +divider: "Separador" +addItem: "Adicionar item" +rearrange: "Reordernar" +relays: "Relays" +addRelay: "Adicionar relay" +inboxUrl: "Inbox URL" +addedRelays: "Relays adicionados" +serviceworkerInfo: "Deve estar habilitado para receber notificações por push." +deletedNote: "Postagem excluÃda" +invisibleNote: "Notas invisÃveis" +enableInfiniteScroll: "Carregar automaticamente" +visibility: "Visibilidade" +poll: "Enquetes" +useCw: "Ocultar conteúdo" +enablePlayer: "Abrir o reprodutor de mÃdia" +disablePlayer: "Fechar o reprodutor de mÃdia" +expandTweet: "Expandir tweet" +themeEditor: "Editor de temas" +description: "Descrição" +describeFile: "Adicionar legenda" +enterFileDescription: "Insira uma legenda" +author: "Autor" +leaveConfirm: "Existem alterações não salvas. Deseja descartá-las?" +manage: "Administrar" +plugins: "Plugins" +preferencesBackups: "Definições de Backup" +deck: "Deck" +undeck: "Sair do deck" +useBlurEffectForModal: "Usar efeito de desfoque para modal" +useFullReactionPicker: "Usar o seletor de reações completo" +width: "Largura" +height: "Altura" +large: "Grande" +medium: "Média" +small: "Pequeno" +generateAccessToken: "Gerar token de acesso" +permission: "Permissões" +enableAll: "Habilitar tudo" +disableAll: "Desabilitar tudo" +tokenRequested: "Autorização de acesso à conta" +pluginTokenRequestedDescription: "Este plugin poderá utilizar as permissões definidas aqui." +notificationType: "Tipos de notificação" +edit: "Editar" +emailServer: "Servidor de e-mail" +enableEmail: "Habilitar envio de e-mails" +emailConfigInfo: "Usado para confirmar o seu endereço de e-mail e redefinir sua senha" +email: "E-mail" +emailAddress: "Endereço de e-mail" +smtpConfig: "Configuração do servidor SMTP" +smtpHost: "Host" +smtpPort: "Porta" smtpUser: "Nome de usuário" smtpPass: "Senha" -clearCache: "Limpar memória transitória" +emptyToDisableSmtpAuth: "Desative a autenticação SMTP deixando o nome de usuário e a senha em branco." +smtpSecure: "Use SSL/TLS implÃcito para conexões SMTP" +smtpSecureInfo: "Desative esta opção ao utilizar STARTTLS." +testEmail: "Testar envio de e-mail" +wordMute: "Silenciar palavras" +regexpError: "Erro na expressão regular" +regexpErrorDescription: "Ocorreu um erro na expressão regular na linha {line} da palavra mutada {tab}:" +instanceMute: "Instâncias silenciadas" +userSaysSomething: "{name} disse algo" +makeActive: "Ativar" +display: "Visualizar" +copy: "Copiar" +metrics: "Métricas" +overview: "Visão geral" +logs: "Logs" +delayed: "atrasado" +database: "Banco de dados" +channel: "Canais" +create: "Criar" +notificationSetting: "Configurações de notificação" +notificationSettingDesc: "Selecione o tipo de notificação a ser exibido." +useGlobalSetting: "Utilizar a configuração global" +useGlobalSettingDesc: "Ao ativar, serão utilizadas as configurações de notificação da conta. Ao desativar, você poderá configurar individualmente." +other: "Outros" +regenerateLoginToken: "Gerar novo token de login" +regenerateLoginTokenDescription: "Gera novamente o token interno usado para o login. Normalmente, isso não é necessário. Ao regenerar, você será desconectado de todos os dispositivos." +setMultipleBySeparatingWithSpace: "Você pode configurar vários itens separando-os por espaço." +fileIdOrUrl: "ID do arquivo ou URL" +behavior: "Comportamento" +sample: "Exemplo" +abuseReports: "Denúncias" +reportAbuse: "Denúncias" +reportAbuseOf: "Denunciar {name}" +fillAbuseReportDescription: "Por favor, forneça detalhes sobre o motivo da denúncia. Se houver uma nota especÃfica envolvida, inclua também a URL dela." +abuseReported: "Denúncia enviada. Obrigado por sua ajuda." +reporter: "Denunciante" +reporteeOrigin: "Origem da denúncia" +reporterOrigin: "Origem do denunciante" +forwardReport: "Encaminhar a denúncia para o servidor remoto" +forwardReportIsAnonymous: "No servidor remoto, suas informações não serão visÃveis, e você será apresentado como uma conta do sistema anônima." +send: "Enviar" +abuseMarkAsResolved: "Marcar denúncia como resolvida" +openInNewTab: "Abrir em nova aba" +openInSideView: "Abrir em visão lateral" +defaultNavigationBehaviour: "Navegação padrão" +editTheseSettingsMayBreakAccount: "Editar essas configurações pode resultar em danos à conta.\"" +instanceTicker: "Informações do servidor das notas" +waitingFor: "Aguardando por {x}" +random: "Aleatório" +system: "Sistema" +switchUi: "Alternar UI" +desktop: "Ãrea de Trabalho" +clip: "Clipe" +createNew: "Criar novo" +optional: "Opcional" +createNewClip: "Criar novo clipe" +unclip: "Remover do clipe" +confirmToUnclipAlreadyClippedNote: "Esta nota já está incluÃda no clipe \"{name}\". Você deseja remover a nota deste clipe?" +public: "Público" +i18nInfo: "Misskey é traduzido para várias lÃnguas por voluntários. Você pode ajudar com as traduções em {link}." +manageAccessTokens: "Gerenciar tokens de acesso" +accountInfo: "Informações da conta" +notesCount: "Número de notas" +repliesCount: "Número de respostas enviadas" +renotesCount: "Número de repostagens feitas" +repliedCount: "Número de respostas recebidas" +renotedCount: "Números de repostagens recebidas" +followingCount: "Número de contas seguidas" +followersCount: "Número de seguidores" +sentReactionsCount: "Número de reações enviadas" +receivedReactionsCount: "Número de reações recebidas" +pollVotesCount: "Número de votos feitos em enquetes" +pollVotedCount: "Número de votos recebidos em enquetes" +yes: "Sim" +no: "Não" +driveFilesCount: "Número de arquivos no drive" +driveUsage: "Capacidade do drive" +noCrawle: "Recusar indexação por crawler" +noCrawleDescription: "Solicitar que os mecanismos de pesquisa externos não indexem o conteúdo de suas páginas de usuário, notas, páginas etc." +lockedAccountInfo: "Mesmo que você defina a aprovação para seguir, a menos que você defina o alcance da nota para 'Apenas seguidores', qualquer pessoa poderá ver suas notas." +alwaysMarkSensitive: "Marcar como sensÃvel por padrão" +loadRawImages: "Exibir as imagens originais ao invés de miniaturas" +disableShowingAnimatedImages: "Não reproduzir imagens animadas" +verificationEmailSent: "Um e-mail de confirmação foi enviado. Siga o link no e-mail para concluir a verificação." +notSet: "Não definido" +emailVerified: "O endereço de e-mail foi confirmado" +noteFavoritesCount: "Número de notas salvas nos favoritos" +pageLikesCount: "Número de páginas curtidas" +pageLikedCount: "Número de curtidas recebidas nas suas páginas" +contact: "Contato" +useSystemFont: "Utilizar a fonte padrão do sistema" +clips: "Clipe" +experimentalFeatures: "Funcionalidades Experimentais" +experimental: "Experimental" +duplicate: "Duplicar" +left: "Esquerda" +wide: "Largo" +narrow: "Estreito" +showTitlebar: "Exibir barra de tÃtulo" +clearCache: "Limpar o cache" +sendErrorReportsDescription: "Ao ativar essa opção, informações detalhadas de erro serão compartilhadas com o Misskey em caso de problemas, o que pode ajudar a melhorar a qualidade do software. As informações de erro podem incluir a versão do sistema operacional, o tipo de navegador e o sua atividade no Misskey." +backgroundColor: "Cor de fundo" +advanced: "Avançado" +value: "Valor" +deleteConfirm: "Confirma a exclusão?" +capacity: "Capacidade" +apply: "Aplicar" +emailNotification: "Notificações por e-mail" +publish: "Publicar" +goBack: "Voltar" +unlikeConfirm: "Deseja realmente deixar de curtir?" info: "Informações" +unknown: "Desconhecido" +enabled: "Ativado" +disabled: "Desativado" user: "Usuários" +administration: "Administrar" +ads: "Anúncios" +middle: "Meio" +emailNotConfiguredWarning: "Endereço de e-mail não configurado. " +sent: "Enviar" +translate: "Traduzir" +usernameInfo: "O nome para identificar exclusivamente a sua conta no servidor. Pode conter letras (az, AZ), números (0~9) e sublinhados (_). O nome de usuário não pode ser alterado posteriormente." +breakFollow: "Remover seguidor" +breakFollowConfirm: "Deseja realmente deixar de seguir?" +on: "Ligado" +off: "Desligado" +emailRequiredForSignup: "Tornar o endereço de e-mail obrigatório durante o cadastro" +unread: "Não lido" +deleteAccountConfirm: "Deseja realmente excluir a conta?" +hide: "Ocultar" +useDrawerReactionPickerForMobile: "Mostrar em formato de gaveta" +clickToFinishEmailVerification: "Clique em [{ok}] para completar a validação do endereço de e-mail." +auto: "Automático" searchByGoogle: "Buscar" file: "Ficheiros" +noEmailServerWarning: "Servidor de e-mail não configurado." +driveCapOverrideLabel: "Altere a capacidade do drive para este usuário" +driveCapOverrideCaption: "Altere a capacidade para o valor padrão informando o valor 0 ou inferior." +deleteAccount: "Excluir conta" +enableAutoSensitiveDescription: "Quando disponÃvel, a marcação de mÃdia sensÃvel será automaticamente atribuÃdo ao conteúdo de mÃdia usando aprendizado de máquina. Mesmo que você desative essa função, em alguns servidores, isso pode ser configurado automaticamente." +activeEmailValidationDescription: "A validação do endereço de e-mail do usuário será realizada de forma mais rigorosa, considerando se é um endereço descartável ou se é possÃvel realizar comunicação efetiva. Se desativado, apenas a validade do formato do endereço será verificada como uma sequência de caracteres." +like: "Curtir" +unlike: "Remover curtida" +numberOfLikes: "Número de curtidas" +show: "Visualizar" +didYouLikeMisskey: "Você gostou do Misskey?" +pleaseDonate: "O Misskey é um software gratuito utilizado por {host}. Para que possamos continuar o desenvolvimento, pedimos que considerem fazer doações. A sua contribuição é muito importante!" +roles: "Cargos" +role: "Cargo" +noRole: "Nenhum cargo" +emailNotSupported: "O envio de e-mails não é suportado nesta instância" +likeOnly: "Apenas curtidas" +likeOnlyForRemote: "Tudo (somente curtidas remotas)" +nonSensitiveOnlyForLocalLikeOnlyForRemote: "Apenas não sensÃveis (somente curtidas remotas)" +rolesAssignedToMe: "Cargos atribuÃdos a mim" +unfavoriteConfirm: "Deseja realmente remover dos favoritos?" +drivecleaner: "Limpeza do drive" +retryAllQueuesConfirmTitle: "Gostaria de tentar novamente agora?" +preservedUsernamesDescription: "Liste os nomes de usuário que deseja reservar, separando-os por quebras de linha. Os nomes de usuário especificados aqui não poderão ser utilizados durante a criação de contas. No entanto, esta restrição não se aplica quando a conta é criada por um administrador. Além disso, as contas que já existem não serão afetadas." +channelArchiveConfirmTitle: "Deseja realmente arquivar {name}?" +youFollowing: "Seguindo" +preventAiLearningDescription: "Solicita-se que o conteúdo de notas e imagens enviadas não seja usado como objeto de aprendizado por sistemas externos de geração de texto ou imagens. Isso é alcançado incluindo a flag 'noai' na resposta HTML. No entanto, o cumprimento dessa solicitação depende do próprio sistema de IA, portanto, não é garantia total de prevenção de aprendizado." +options: "Opções" +rolesThatCanBeUsedThisEmojiAsReaction: "Cargos que podem utilizar este emoji como reação" +rolesThatCanBeUsedThisEmojiAsReactionEmptyDescription: "Se nenhum cargo for especificado, qualquer pessoa pode usar este emoji como reação." +rolesThatCanBeUsedThisEmojiAsReactionPublicRoleWarn: "Estes cargos devem ser públicos." +waitingForMailAuth: "Verificação de e-mail pendente " +_initialAccountSetting: + followUsers: "Siga usuários que lhe interessam para criar a sua linha do tempo." +_accountMigration: + moveFromDescription: "Se você deseja migrar de outra conta para esta, é necessário criar um alias aqui. Por favor, insira a conta de origem da migração no seguinte formato: @username@server.example.com. Para excluir o alias, deixe o campo em branco e clique em salvar (não recomendado)." + moveAccountDescription: "Você está migrando para uma nova conta.\n ・Seus seguidores irão automaticamente seguir a nova conta.\n ・Todas as suas conexões de seguidores nesta conta serão removidas.\n ・Você não poderá mais criar novas notas nesta conta.\n\nA migração dos seguidores é automática, mas a migração das pessoas que você segue deve ser feita manualmente. Antes de migrar, exporte quem você está seguindo nesta conta e, assim que migrar, importe essa lista na nova conta.\nO mesmo se aplica para listas, silenciamentos e bloqueios, que também devem ser migrados manualmente.\n\n(Esta descrição se refere ao comportamento do servidor Misskey v13.12.0 ou posterior. Outros softwares ActivityPub, como Mastodon, podem ter comportamentos diferentes.)" + moveAccountHowTo: "Para realizar a migração da conta, primeiro crie um alias para esta conta no destino da migração. Após criar o alias, insira a conta de destino da migração no seguinte formato: @username@server.example.com." + migrationConfirm: "Tem certeza de que deseja migrar esta conta para '{account}'? Uma vez migrada, não poderá ser desfeita e não será possÃvel usar esta conta novamente em seu estado original." + postMigrationNote: "A remoção dos seguidores desta conta será realizada 24 horas após a operação de migração. O número de seguidores e seguidos desta conta se tornará zero. Os seguidores não serão removidos, portanto, eles continuarão a ver as postagens destinadas aos seguidores desta conta." +_achievements: + earnedAt: "Data de aquisição" + _types: + _notes1: + title: "Configurando o meu misskey" + description: "Postou uma nota pela primeira vez" + flavor: "Divirta-se com o Misskey!" + _notes10: + title: "Algumas notas" + description: "Postou 10 notas" + _notes100: + title: "Um monte de notas" + description: "Postou 100 notas" + _notes500: + title: "Coberto por notas" + description: "Postou 500 notas" + _notes1000: + title: "Uma montanha de notas" + description: "Postou 1000 notas" + _notes5000: + title: "Enxurrada de notas" + description: "Postou 5000 notas" + _notes10000: + title: "Super nota" + description: "Postou 10000 notas" + _notes20000: + title: "Preciso... de mais... notas..." + description: "Postou 20000 notas" + _notes30000: + title: "Notas, Notas, NOTAS!" + description: "Postou 30000 notas" + _notes40000: + title: "Fábrica de notas" + description: "Postou 40000 notas" + _notes50000: + title: "Planeta de notas" + description: "Postou 50000 notas" + _notes60000: + title: "Quasar de notas" + description: "Postou 60000 notas" + _notes70000: + title: "Buraco negro de notas" + description: "Postou 70000 notas" + _notes80000: + title: "Galáxia de notas" + description: "Postou 80000 notas" + _notes90000: + title: "Universo de notas" + description: "Postou 90000 notas" + _notes100000: + title: "ALL YOUR NOTE ARE BELONG TO US" + description: "Postou 100000 notas" + flavor: "Você realmente tem muita coisa para escrever" + _login3: + title: "Iniciante I" + description: "Fez login por um total de 3 dias" + flavor: "De hoje em diante, me chame apenas de Misskist" + _login7: + title: "Iniciante II" + description: "Fez login por um total de 7 dias" + flavor: "Pegando o jeito da coisa?" + _login15: + title: "Iniciante III" + description: "Fez login por um total de 15 dias" + _login30: + title: "Misskist I" + description: "Fez login por um total de 30 dias" + _login60: + title: "Misskist II" + description: "Fez login por um total de 60 dias" + _login100: + title: "Misskist III" + description: "Fez login por um total de 100 dias" + flavor: "Misskist violento" + _login200: + title: "Freguês I" + description: "Fez login por um total de 200 dias" + _login300: + title: "Freguês II" + description: "Fez login por um total de 300 dias" + _login400: + title: "Freguês III" + description: "Fez login por um total de 400 dias" + _login500: + title: "Veterano I" + description: "Fez login por um total de 500 dias" + flavor: "Cavalheiros, tudo o que peço são notas" + _login600: + title: "Veterano II" + description: "Fez login por um total de 600 dias" + _login700: + title: "Veterano III" + description: "Fez login por um total de 700 dias" + _login800: + title: "Mestre das notas I" + description: "Fez login por um total de 800 dias" + _login900: + title: "Mestre das notas II" + description: "Fez login por um total de 900 dias" + _login1000: + title: "Mestre das notas III" + description: "Fez login por um total de 1000 dias" + flavor: "Obrigado por utilizar o Misskey!" + _noteClipped1: + title: "Não posso deixar de adicionar ao clipe" + description: "Adicionou a um clipe a sua primeira nota" + _noteFavorited1: + title: "Astrônomo amador" + description: "Adicionou uma nota aos favoritos pela primeira vez" + _myNoteFavorited1: + title: "Cabeça nas estrelas" + description: "Teve uma das suas notas adicionada aos favoritos de alguém" + _profileFilled: + title: "Tudo pronto" + description: "Configurou o seu perfil" + _markedAsCat: + title: "Eu Sou Um Gato" + description: "Marcou a sua conta como um gato" + flavor: "Ainda não tenho um nome." + _following1: + title: "Primeira vez seguindo alguém" + description: "Seguiu um usuário pela primeira vez" + _following10: + title: "Circulando, circulando" + description: "Seguiu 10 usuários" + _following50: + title: "Muitos amigos" + description: "Seguiu 50 usuários" + _following100: + title: "100 amigos" + description: "Seguiu 100 usuários" + _following300: + title: "Sobrecarga de amigos" + description: "Seguiu 300 usuários" + _followers1: + title: "Primeiro seguidor" + description: "Ganhou o seu primeiro seguidor" + _followers10: + title: "Sigam-me os bons!" + description: "Ganhou 10 seguidores" + _followers50: + title: "Aos montes" + description: "Ganhou 50 seguidores" + _followers100: + title: "Popular" + description: "Ganhou 100 seguidores" + _followers300: + title: "Em fila única, por favor" + description: "Ganhou 300 seguidores" + _followers500: + title: "Torre de celular" + description: "Ganhou 500 seguidores" + _followers1000: + title: "Influencer" + description: "Ganhou 1000 seguidores" + _noteDeletedWithin1min: + title: "Deixa pra lá" + description: "Excluà a postagem dentro de 1 minuto após ter publicado" + _driveFolderCircularReference: + title: "Referência circular" +_role: + new: "Novo cargo" + edit: "Editar cargo" + name: "Nome do Cargo" + description: "Descrição do cargo" + permission: "Permissões do cargo" + descriptionOfPermission: "<b>Moderador</b> permite que você execute operações básicas relacionadas à moderação.\n<b>Administradores</b> podem alterar todas as configurações do servidor." + assignTarget: "Atribuir" + descriptionOfAssignTarget: "<b>Manual</b> para gerenciar manualmente quem está incluÃdo neste cargo.\n<b>Condicional</b> define uma condição e os usuários que corresponderem a ela serão incluÃdos automaticamente." + manual: "Documentação" + conditional: "Condicional" + condition: "Condição" + isConditionalRole: "Este é um cargo condicional." + isPublic: "Cargo público" + descriptionOfIsPublic: "Este cargo será exibido no perfil do usuário." + options: "Opções" + policies: "PolÃticas" + baseRole: "Cargo padrão" + useBaseValue: "Usar o valor do cargo padrão" + chooseRoleToAssign: "Selecionar o cargo a ser atribuÃdo" + iconUrl: "URL do Ãcone" + asBadge: "Exibir como insÃgnia" + descriptionOfAsBadge: "Quando ativado, o Ãcone do cargo será exibido ao lado do nome de usuário" + isExplorable: "Fazer o cargo explorável" + descriptionOfIsExplorable: "Ao ativar, a lista de membros será pública na seção 'Explorar' e a linha do tempo do cargo ficará disponÃvel." + displayOrder: "Ordenação" + descriptionOfDisplayOrder: "Quanto maior o número, maior a posição de destaque na interface do usuário." + canEditMembersByModerator: "Permitir a edição de membros deste cargo por moderadores" + descriptionOfCanEditMembersByModerator: "Quando ativado, os moderadores também poderão atribuir/remover usuários deste papel, além dos administradores. Quando desativado, apenas os administradores poderão fazê-lo." + priority: "Prioridade" + _priority: + low: "Baixa" + middle: "Média" + high: "Alta" + _options: + gtlAvailable: "Visualizar Linha do Tempo Global" + ltlAvailable: "Visualizar Linha do Tempo Local" + canPublicNote: "Permitir postagem pública" + canInvite: "Permitir a criação de códigos de convites para a instância" + inviteLimit: "Limite de códigos de convite" + inviteLimitCycle: "Intervalo de emissão do código de convite" + inviteExpirationTime: "Prazo de validade do código de convite" + canManageCustomEmojis: "Permitir gerenciar emojis personalizados" + driveCapacity: "Capacidade do drive" + alwaysMarkNsfw: "Sempre marcar arquivos como NSFW" + pinMax: "Número máximo de notas fixadas" + antennaMax: "Número máximo de antenas" + wordMuteMax: "Número máximo de caracteres nas palavras silenciadas" + webhookMax: "Número máximo de webhooks" + clipMax: "Número máximo de clipes" + noteEachClipsMax: "Número máximo de notas em um clipe" + userListMax: "Número máximo de listas de usuários" + userEachUserListsMax: "Número máximo de usuários em uma lista" + rateLimitFactor: "Taxa de limitação" + descriptionOfRateLimitFactor: "Valores menores são menos restritivos, valores maiores são mais restritivos." + canHideAds: "Permitir ocultar anúncios" + canSearchNotes: "Permitir a busca de notas" + _condition: + isLocal: "Usuário local" + isRemote: "Usuário remoto" + createdLessThan: "Menos de X passados desde a criação da conta" + createdMoreThan: "Mais de X passados desde a criação da conta" + followersLessThanOrEq: "Possui X ou menos seguidores" + followersMoreThanOrEq: "Possui X ou mais seguidores" + followingLessThanOrEq: "Segue X ou menos contas" + followingMoreThanOrEq: "Segue X ou mais contas" + notesLessThanOrEq: "A quantidade de postagens é menor ou igual a" + notesMoreThanOrEq: "A quantidade de postagens é maior ou igual a" + and: "~ E ~ (Condicional)" + or: "~ OU ~ (Condicional)" + not: "Não ~ (Condicional)" +_sensitiveMediaDetection: + description: "Use o aprendizado de máquina para detectar automaticamente mÃdias sensÃveis para moderação. Isso pode aumentar ligeiramente a carga no servidor." + sensitivityDescription: "Ao reduzir a sensibilidade, as detecções incorretas (falsos positivos) diminuem. Ao aumentar a sensibilidade, as falhas de detecção (falsos negativos) diminuem." +_emailUnavailable: + used: "O endereço de e-mail informado já está sendo utilizado" + format: "Formado de e-mail inválido" + disposable: "Endereços de e-mail descartáveis não devem ser utilizados" + mx: "O servidor de informado é inválido" + smtp: "O servidor de e-mail não está respondendo" +_ffVisibility: + public: "Publicar" + followers: "VisÃvel apenas para seguidores" +_signup: + emailAddressInfo: "Por favor, insira o seu endereço de e-mail. Ele não será divulgado." + emailSent: "Um e-mail de confirmação foi enviado para o endereço de e-mail fornecido ({email}). Acesse o link fornecido no e-mail para concluir a criação de sua conta." +_accountDelete: + accountDelete: "Remover Conta" + mayTakeTime: "A exclusão de uma conta é um processo que requer muito recurso, portanto, se você tiver muito conteúdo criados ou arquivos enviados, pode levar algum tempo até ser concluÃda." + sendEmail: "Quando a exclusão da conta estiver concluÃda, enviaremos uma notificação para o endereço de e-mail registrado." + requestAccountDelete: "Solicitar exclusão de conta" + started: "O processo de exclusão foi iniciado." + inProgress: "A exclusão está em andamento" +_ad: + back: "Voltar" +_forgotPassword: + enterEmail: "Por favor, insira o endereço de e-mail usado no cadastro de sua conta. Um link para redefinição de senha será enviado para esse endereço." + ifNoEmail: "Caso você não tenha registrado um endereço de e-mail, por favor, entre em contato com o administrador." +_gallery: + liked: "Postagens curtidas" + like: "Curtir" + unlike: "Remover curtida" _email: _follow: title: "Você tem um novo seguidor" + _receiveFollowRequest: + title: "Você recebeu um pedido de seguidor" +_preferencesBackups: + cannotSave: "Não foi possÃvel salvar" + applyConfirm: "Deseja aplicar o backup '{name}' ao dispositivo atual? As configurações atuais do dispositivo serão perdidas." + deleteConfirm: "Deseja excluir {name}?" + cannotLoad: "Não foi possÃvel carregar" +_channel: + featured: "Destaques" + following: "Seguindo" _theme: + description: "Descrição" + deleteConstantConfirm: "Confirma a exclusão da constante {const}?" keys: mention: "Menção" renote: "Repostar" + divider: "Separador" _sfx: note: "Posts" notification: "Notificações" chat: "Chat" +_ago: + invalid: "Não há nada aqui" +_timelineTutorial: + step1_2: "Existem vários tipos de linhas do tempo, por exemplo, na 'Linha do Tempo Principal', você verá as notas das pessoas que está seguindo, e na 'Linha do Tempo Local', verá todas as notas de {name}." +_2fa: + securityKeyInfo: "Além da autenticação por impressão digital ou PIN, você também pode configurar a autenticação por chaves de segurança de hardware compatÃvel com FIDO2 para proteger ainda mais a sua conta." + removeKeyConfirm: "Deseja excluir {name}?" + renewTOTPCancel: "Não, obrigado" +_permissions: + "read:account": "Visualizar informações da conta" + "write:account": "Editar informações da conta" + "read:blocks": "Visualizar a sua lista de usuários bloqueados" + "write:blocks": "Editar a sua lista de usuários bloqueados" + "read:drive": "Visualizar os seus arquivos e pastas do drive" + "write:drive": "Editar ou excluir os seus arquivos e pastas do drive" + "read:favorites": "Visualizar a sua lista de favoritos" + "write:favorites": "Editar a sua lista de favoritos" + "read:following": "Visualizar informações de quem você segue" + "write:following": "Seguir ou deixar de seguir outras contas" + "read:messaging": "Visualizar os seus chats" + "write:messaging": "Compor ou editar mensagens de chat" + "read:mutes": "Visualizar a sua lista de usuários silenciados" + "write:mutes": "Editar a sua lista de usuários silenciados" + "write:notes": "Compor ou excluir notas" + "read:notifications": "Visualizar as suas notificações" + "write:notifications": "Gerenciar as suas notificações" + "read:reactions": "Visualizar as suas reações" + "write:reactions": "Editar as suas reações" + "write:votes": "Votar em enquetes" + "read:pages": "Visualizar as suas páginas" + "write:pages": "Editar ou excluir as suas páginas" + "read:page-likes": "Visualizar as suas curtidas em páginas" + "write:page-likes": "Editar as suas curtidas em páginas" + "read:user-groups": "Visualizar os seus grupos de usuários" + "write:user-groups": "Editar ou excluir os seus grupos de usuários" + "read:channels": "Visualizar os seus canais" + "write:channels": "Editar os seus canais" + "read:gallery": "Visualizar a sua galeria" + "write:gallery": "Editar sua galeria" + "read:gallery-likes": "Visualizar a sua lista de curtidas da galeria" + "write:gallery-likes": "Editar a sua lista de curtidas da galeria" _widgets: profile: "Perfil" instanceInfo: "Informações da instância" + memo: "Notas adesivas" notifications: "Notificações" - timeline: "Timeline" - activity: "atividade" - federation: "União" - jobQueue: "Fila de trabalhos" + timeline: "Linha do tempo" + calendar: "Calendário" + trends: "Destaques" + clock: "Relógio" + rss: "Leitor de RSS" + rssTicker: "Ticker RSS" + activity: "Atividades" + photos: "Fotos" + digitalClock: "Relógio digital" + unixClock: "Hora UNIX" + federation: "Federação" + instanceCloud: "Nuvem de instâncias" + postForm: "Campo de postagem" + slideshow: "Apresentação de slides" + button: "Botão" + onlineUsers: "Usuários Online" + jobQueue: "Fila de tarefas" + serverMetric: "Métricas do servidor" + aiscript: "Console AiScript" + aiscriptApp: "AiScript App" + aichan: "Ai" + userList: "Lista de usuários" _userList: - chooseList: "Escolhe uma lista" + chooseList: "Selecione uma lista" + clicker: "Clicker" _cw: show: "Carregar mais" +_poll: + canMultipleVote: "Permitir múltipla seleção" + vote: "Votar em enquetes" _visibility: home: "casa" followers: "Seguidores" + followersDescription: "Tornar visÃvel apenas para os meus seguidores" _profile: name: "Nome" username: "Nome de usuário" _exportOrImport: + favoritedNotes: "Notas nos favoritos" followingList: "Seguindo" muteList: "Silenciar" blockingList: "Bloquear" @@ -502,7 +1176,24 @@ _charts: federation: "União" _timelines: home: "casa" +_play: + new: "Criar Play" + edit: "Editar Play" + created: "Play criado" + updated: "Play editado" + deleted: "Play foi excluÃdo" + pageSetting: "Configurações do Play" + editThisPage: "Editar este Play" + my: "Meus Plays" + liked: "Plays curtidos" + script: "Script" + summary: "Descrição" _pages: + deleted: "Página excluÃda com sucesso" + viewPage: "Visualizar as suas páginas" + like: "Curtir" + unlike: "Remover curtida" + liked: "Páginas curtidas" blocks: image: "imagem" _relayStatus: @@ -515,8 +1206,8 @@ _notification: youGotReply: "{name} te respondeu" youGotQuote: "{name} te citou" youWereFollowed: "Você tem um novo seguidor" - youReceivedFollowRequest: "Você recebeu um pedido de seguimento" - yourFollowRequestAccepted: "Seu pedido de seguimento foi aceito" + youReceivedFollowRequest: "Você recebeu um pedido de seguidor" + yourFollowRequestAccepted: "Seu pedido de seguidor foi aceito" pollEnded: "Os resultados da enquete agora estão disponÃveis" emptyPushNotificationMessage: "As notificações de alerta foram atualizadas" _types: @@ -528,8 +1219,8 @@ _notification: quote: "Citar" reaction: "Reações" pollEnded: "Enquetes terminando" - receiveFollowRequest: "Recebeu pedidos de seguimento" - followRequestAccepted: "Aceitou pedidos de seguimento" + receiveFollowRequest: "Recebeu pedidos de seguidor" + followRequestAccepted: "Aceitou pedidos de seguidor" app: "Notificações de aplicativos conectados" _actions: followBack: "te seguiu de volta" @@ -545,6 +1236,7 @@ _deck: swapDown: "Trocar de posição com a coluna abaixo" popRight: "Acoplar coluna à direita" profile: "Perfil" + deleteProfile: "Remover perfil" _columns: main: "Principal" widgets: "Widgets" @@ -552,7 +1244,16 @@ _deck: tl: "Timeline" antenna: "Antenas" list: "Listas" + channel: "Canais" mentions: "Menções" direct: "Notas diretas" + roleTimeline: "Linha do tempo do cargo" +_drivecleaner: + orderBySizeDesc: "Tamanho descendente" + orderByCreatedAtAsc: "Data ascendente" _webhookSettings: name: "Nome" + active: "Ativado" + _events: + follow: "Quando seguindo um usuário" + followed: "Quando sendo seguido" diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml index 080ebf16670e452de8afb9ee6d500054d86b0c79..f83df32886e49dfb9ecf9a71a2a9005797bda550 100644 --- a/locales/ru-RU.yml +++ b/locales/ru-RU.yml @@ -49,6 +49,7 @@ delete: "Удалить" deleteAndEdit: "Удалить и отредактировать" deleteAndEditConfirm: "Удалить Ñту заметку и Ñоздать отредактированную? Ð’Ñе реакции, ÑÑылки и ответы на ÑущеÑтвующую будут будут потерÑны." addToList: "Добавить в ÑпиÑок" +addToAntenna: "Добавить к антенне" sendMessage: "Отправить Ñообщение" copyRSS: "Скопировать RSS" copyUsername: "Скопировать Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ" @@ -155,6 +156,8 @@ addEmoji: "Добавить Ñмодзи" settingGuide: "Рекомендуемые наÑтройки" cacheRemoteFiles: "Кешировать внешние файлы" cacheRemoteFilesDescription: "Когда Ñта наÑтройка отключена, файлы Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… Ñайтов будут загружатьÑÑ Ð¿Ñ€Ñмо оттуда. Ðто ÑÑкономит меÑто на Ñервере, но увеличит трафик, так как не будут ÑоздаватьÑÑ ÑÑкизы." +cacheRemoteSensitiveFiles: "Кешировать внешние файлы" +cacheRemoteSensitiveFilesDescription: "ОпиÑание удаленных внешних файлов в кÑше" flagAsBot: "Ðккаунт бота" flagAsBotDescription: "Включите, еÑли Ñтот аккаунт управлÑетÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹. Ðто позволит ÑиÑтеме Misskey учитывать Ñто, а также поможет разработчикам других ботов предотвратить беÑконечные циклы взаимодейÑтвиÑ." flagAsCat: "Ðккаунт кота" @@ -316,6 +319,7 @@ copyUrl: "Копировать ÑÑылку" rename: "Переименовать" avatar: "Ðватар" banner: "Шапка" +displayOfSensitiveMedia: "Определение деликатного контента" whenServerDisconnected: "Когда Ñоединение Ñ Ñервером потерÑно" disconnectedFromServer: "Разорвано Ñоединение Ñ Ñервером" reload: "Перезагрузить" @@ -840,6 +844,8 @@ breakFollow: "ОтпиÑка" breakFollowConfirm: "Удалить из подпиÑок Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ?" itsOn: "Включено" itsOff: "Выключено" +on: "Вкл" +off: "Выкл" emailRequiredForSignup: "Ð”Ð»Ñ Ñ€ÐµÐ³Ð¸Ñтрации учётной запиÑи нужен Ð°Ð´Ñ€ÐµÑ Ñлектронной почты" unread: "Ðепрочитанное" filter: "Фильтры" @@ -994,6 +1000,7 @@ cannotBeChangedLater: "Ðто Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ позже" reactionAcceptance: "ПринÑтие реакций" likeOnly: "Только лайки" likeOnlyForRemote: "Только лайки Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ñ… Ñерверов" +nonSensitiveOnly: "БезопаÑный Ñерфинг" rolesAssignedToMe: "Мои роли" resetPasswordConfirm: "СброÑить пароль?" sensitiveWords: "ЧувÑтвительные Ñлова" @@ -1014,7 +1021,15 @@ noteIdOrUrl: "ID или ÑÑылка на заметку" video: "Видео" videos: "Видео" dataSaver: "ÐÐºÐ¾Ð½Ð¾Ð¼Ð¸Ñ Ñ‚Ñ€Ð°Ñ„Ð¸ÐºÐ°" +accountMigration: "ПеренеÑти учётную запиÑÑŒ" +accountMoved: "Ð£Ñ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ перенеÑена" +operationForbidden: "Ðта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð°." +addMemo: "Добавить заметку" +editMemo: "Редактировать заметку" +reactionsList: "Реакции" renotesList: "РепоÑÑ‚Ñ‹" +notificationDisplay: "Отображение уведомлениÑ" +leftTop: "Верхний левый угол" horizontal: "Сбоку" youFollowing: "ПодпиÑки" options: "ÐаÑтройки ролей" diff --git a/locales/th-TH.yml b/locales/th-TH.yml index 82032b06c2acc44215cef06ae595b1b3945ed6d0..ddbafbe79ad7980b720e97aa4fc8ac73d7065561 100644 --- a/locales/th-TH.yml +++ b/locales/th-TH.yml @@ -98,7 +98,7 @@ enterListName: "ใส่ชื่à¸à¸ªà¸³à¸«à¸£à¸±à¸šà¸£à¸²à¸¢à¸à¸²à¸£à¸¥à¸´ privacy: "ความเป็นส่วนตัว" makeFollowManuallyApprove: "ติดตามคำขà¸à¸—ี่ต้à¸à¸‡à¹„ด้รับà¸à¸²à¸£à¸à¸™à¸¸à¸¡à¸±à¸•à¸´" defaultNoteVisibility: "à¸à¸²à¸£à¸¡à¸à¸‡à¹€à¸«à¹‡à¸™à¸—ี่เป็นค่าเริ่มต้น" -follow: "à¸à¸³à¸¥à¸±à¸‡à¸•à¸´à¸”ตาม" +follow: "ติดตาม" followRequest: "ส่งคำขà¸à¸•à¸´à¸”ตาม" followRequests: "ส่งคำขà¸à¸•à¸´à¸”ตาม" unfollow: "เลิà¸à¸•à¸´à¸”ตาม" @@ -183,7 +183,7 @@ selectUser: "เลืà¸à¸à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™" recipient: "ผู้รับ" annotation: "ความคิดเห็น" federation: "เฟดิเวิร์ส" -instances: "ตัวà¸à¸¢à¹ˆà¸²à¸‡" +instances: "Server" registeredAt: "จดทะเบียนที่" latestRequestReceivedAt: "ได้รับคำขà¸à¸¥à¹ˆà¸²à¸ªà¸¸à¸”ไปà¹à¸¥à¹‰à¸§" latestStatus: "สถานะล่าสุด" @@ -1091,6 +1091,9 @@ usedAt: "ใช้à¹à¸¥à¹‰à¸§à¸—ี่" unused: "ไม่ใช้à¹à¸¥à¹‰à¸§" used: "ใช้à¹à¸¥à¹‰à¸§" expired: "หมดà¸à¸²à¸¢à¸¸à¹à¸¥à¹‰à¸§" +doYouAgree: "ยà¸à¸¡à¸£à¸±à¸šà¸¡à¸±à¹‰à¸¢?" +beSureToReadThisAsItIsImportant: "à¸à¸£à¸¸à¸“าà¸à¹ˆà¸²à¸™à¸‚้à¸à¸¡à¸¹à¸¥à¸—ี่สำคัà¸à¸à¸±à¸™à¸™à¸µà¹‰" +iHaveReadXCarefullyAndAgree: "ฉันได้à¸à¹ˆà¸²à¸™à¸‚้à¸à¸„วาม \"{x}\" à¹à¸¥à¸°à¸¢à¸´à¸™à¸¢à¸à¸¡" _initialAccountSetting: accountCreated: "คุณได้สร้างบัà¸à¸Šà¸µà¸‚à¸à¸‡à¸„ุณสำเร็จเรียบร้à¸à¸¢à¹à¸¥à¹‰à¸§!" letsStartAccountSetup: "สำหรับผู้เริ่มต้นมาตั้งค่าโปรไฟล์ขà¸à¸‡à¸„ุณà¸à¸±à¸™à¹€à¸–à¸à¸°" diff --git a/locales/uz-UZ.yml b/locales/uz-UZ.yml new file mode 100644 index 0000000000000000000000000000000000000000..6eb5af78cfc2abde1b621e2b2f499417bf855075 --- /dev/null +++ b/locales/uz-UZ.yml @@ -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: "Qo‘shimcha 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: "Ro‘yxatga qo‘shish" +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: "Ko‘proq ko‘rish" +showMore: "Ko‘proq ko‘rish" +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 bo‘lish" +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 bo‘lish" +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 o‘chirish" +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 to‘xtatib qo‘ymoqchi 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 o‘zaro aloqada bo‘lmaydi. Subdomenlar ham bloklangan." +muteAndBlock: "Ovozsiz va Bloklangan" +mutedUsers: "Ovozsiz foydalanuvchilar" +blockedUsers: "Bloklangan foydalanuvchilar" +noUsers: "Foydalanuvchilar yo‘q" +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 o‘zgartirish" +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: "O‘qildi" +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 qorong‘i 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 o‘zgartirish" +deleteFolder: "Papkani o‘chirish" +addFile: "Fayl qo‘shish" +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 ko‘rsatish" +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: "Qo‘shimcha" +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: "Ko‘proq ko‘rish" + 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 bo‘lish" + muteList: "Ovozni o‘chirish" + 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 bo‘lish" + 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 o‘chirib tashlash" + _columns: + main: "Asosiy" + notifications: "Xabarnomalar" + tl: "Xronologiya" + antenna: "Antennalar" + list: "Ro‘yxat" + channel: "Kanal" + mentions: "Eslatib o'tish" + direct: "Bevosita qaydlar" + roleTimeline: "Rol xronologiyasi" +_webhookSettings: + name: "Ism" + active: "Yoqilgan" + _events: + renote: "Qayta qayd qilinganda" + mention: "Eslanganda" diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index d1b11a3540018227f74012e9eac4c7ad8c7500f2..eff2df984905d7b380f22fc063ef98b7e08b045a 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -1091,6 +1091,9 @@ usedAt: "使用时间" unused: "未使用" used: "已使用" expired: "已过期" +doYouAgree: "ä½ åŒæ„å—?" +beSureToReadThisAsItIsImportant: "请好好阅读,这真的很é‡è¦ã€‚" +iHaveReadXCarefullyAndAgree: "我已ç»ä»”细阅读并åŒæ„了「{x}ã€çš„内容。" _initialAccountSetting: accountCreated: "账户创建完æˆäº†ï¼" letsStartAccountSetup: "æ¥è¿›è¡Œå¸æˆ·çš„åˆå§‹è®¾ç½®å§ã€‚" diff --git a/package.json b/package.json index 6867a7f50c3641b7780f5e25b94a13ebb3e958ab..125a33f4063c6b9d1f39351690f821ce91d8be40 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { "name": "misskey", - "version": "13.14.1", + "version": "13.14.2", "codename": "nasubi", "repository": { "type": "git", "url": "https://github.com/misskey-dev/misskey.git" }, - "packageManager": "pnpm@8.6.9", + "packageManager": "pnpm@8.6.10", "workspaces": [ "packages/frontend", "packages/backend", diff --git a/packages/backend/package.json b/packages/backend/package.json index 7f64c2a9acbc9a5ffb3ac214cdcb6b5d29468600..f5298c056e955a63902783fa9d890c8de2f218d0 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -28,6 +28,7 @@ "@swc/core-android-arm64": "1.3.11", "@swc/core-darwin-arm64": "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-arm64-gnu": "1.3.56", "@swc/core-linux-arm64-musl": "1.3.56", @@ -39,18 +40,19 @@ "@tensorflow/tfjs": "4.4.0", "@tensorflow/tfjs-node": "4.4.0", "bufferutil": "^4.0.7", - "slacc-android-arm-eabi": "0.0.9", - "slacc-android-arm64": "0.0.9", - "slacc-darwin-arm64": "0.0.9", - "slacc-darwin-universal": "0.0.9", - "slacc-darwin-x64": "0.0.9", - "slacc-freebsd-x64": "0.0.9", - "slacc-linux-arm-gnueabihf": "0.0.9", - "slacc-linux-arm64-gnu": "0.0.9", - "slacc-linux-arm64-musl": "0.0.9", - "slacc-linux-x64-gnu": "0.0.9", - "slacc-win32-arm64-msvc": "0.0.9", - "slacc-win32-x64-msvc": "0.0.9", + "slacc-android-arm-eabi": "0.0.10", + "slacc-android-arm64": "0.0.10", + "slacc-darwin-arm64": "0.0.10", + "slacc-darwin-universal": "0.0.10", + "slacc-darwin-x64": "0.0.10", + "slacc-freebsd-x64": "0.0.10", + "slacc-linux-arm-gnueabihf": "0.0.10", + "slacc-linux-arm64-gnu": "0.0.10", + "slacc-linux-arm64-musl": "0.0.10", + "slacc-linux-x64-gnu": "0.0.10", + "slacc-linux-x64-musl": "0.0.10", + "slacc-win32-arm64-msvc": "0.0.10", + "slacc-win32-x64-msvc": "0.0.10", "utf-8-validate": "^6.0.3" }, "dependencies": { @@ -141,7 +143,7 @@ "semver": "7.5.4", "sharp": "0.32.3", "sharp-read-bmp": "github:misskey-dev/sharp-read-bmp", - "slacc": "0.0.9", + "slacc": "0.0.10", "strict-event-emitter-types": "2.0.0", "stringz": "2.1.0", "summaly": "github:misskey-dev/summaly", diff --git a/packages/backend/src/core/DownloadService.ts b/packages/backend/src/core/DownloadService.ts index 09039a8b577ba98849d9c302ca88b1130fff9996..1ad7c0137ba9c2b68c4fd37eb9b461eb03124d86 100644 --- a/packages/backend/src/core/DownloadService.ts +++ b/packages/backend/src/core/DownloadService.ts @@ -1,6 +1,5 @@ import * as fs from 'node:fs'; -import * as stream from 'node:stream'; -import * as util from 'node:util'; +import * as stream from 'node:stream/promises'; import { Inject, Injectable } from '@nestjs/common'; import ipaddr from 'ipaddr.js'; import chalk from 'chalk'; @@ -14,7 +13,6 @@ import { StatusError } from '@/misc/status-error.js'; import { LoggerService } from '@/core/LoggerService.js'; import type Logger from '@/logger.js'; -const pipeline = util.promisify(stream.pipeline); import { bindThis } from '@/decorators.js'; @Injectable() @@ -102,7 +100,7 @@ export class DownloadService { }); try { - await pipeline(req, fs.createWriteStream(path)); + await stream.pipeline(req, fs.createWriteStream(path)); } catch (e) { if (e instanceof Got.HTTPError) { 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 await this.downloadUrl(url, path); - const text = await util.promisify(fs.readFile)(path, 'utf8'); + const text = await fs.promises.readFile(path, 'utf8'); return text; } finally { diff --git a/packages/backend/src/core/FileInfoService.ts b/packages/backend/src/core/FileInfoService.ts index d43575b336708a5183ba023fe474d1d5414a64e4..1028d3760e969fd218c177cb5582a78f61ba8baa 100644 --- a/packages/backend/src/core/FileInfoService.ts +++ b/packages/backend/src/core/FileInfoService.ts @@ -1,8 +1,7 @@ import * as fs from 'node:fs'; import * as crypto from 'node:crypto'; import { join } from 'node:path'; -import * as stream from 'node:stream'; -import * as util from 'node:util'; +import * as stream from 'node:stream/promises'; import { Injectable } from '@nestjs/common'; import { FSWatcher } from 'chokidar'; import * as fileType from 'file-type'; @@ -16,8 +15,6 @@ import { createTempDir } from '@/misc/create-temp.js'; import { AiService } from '@/core/AiService.js'; import { bindThis } from '@/decorators.js'; -const pipeline = util.promisify(stream.pipeline); - export type FileInfo = { size: number; md5: string; @@ -371,8 +368,7 @@ export class FileInfoService { */ @bindThis public async getFileSize(path: string): Promise<number> { - const getStat = util.promisify(fs.stat); - return (await getStat(path)).size; + return (await fs.promises.stat(path)).size; } /** @@ -381,7 +377,7 @@ export class FileInfoService { @bindThis private async calcHash(path: string): Promise<string> { const hash = crypto.createHash('md5').setEncoding('hex'); - await pipeline(fs.createReadStream(path), hash); + await stream.pipeline(fs.createReadStream(path), hash); return hash.read(); } diff --git a/packages/backend/src/core/activitypub/ApAudienceService.ts b/packages/backend/src/core/activitypub/ApAudienceService.ts index a4ab5eae2013850f0e164714a6e7955f643551bc..f2d84341f4d5ea50002936ef8f48e91c8691f2e3 100644 --- a/packages/backend/src/core/activitypub/ApAudienceService.ts +++ b/packages/backend/src/core/activitypub/ApAudienceService.ts @@ -95,7 +95,7 @@ export class ApAudienceService { private isPublic(id: string): boolean { return [ 'https://www.w3.org/ns/activitystreams#Public', - 'as#Public', + 'as:Public', 'Public', ].includes(id); } diff --git a/packages/backend/src/server/api/ApiCallService.ts b/packages/backend/src/server/api/ApiCallService.ts index c4c02e7afeb2a269af9ea27349d1afc870ba7562..3e8b9fb727ea25079f587afbe64ced46b532170e 100644 --- a/packages/backend/src/server/api/ApiCallService.ts +++ b/packages/backend/src/server/api/ApiCallService.ts @@ -1,7 +1,6 @@ import { randomUUID } from 'node:crypto'; -import { pipeline } from 'node:stream'; 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 { DI } from '@/di-symbols.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 { IEndpointMeta, IEndpoint } from './endpoints.js'; -const pump = promisify(pipeline); - const accessDenied = { message: 'Access denied.', code: 'ACCESS_DENIED', @@ -138,7 +135,7 @@ export class ApiCallService implements OnApplicationShutdown { } 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>; for (const [k, v] of Object.entries(multipartData.fields)) { diff --git a/packages/backend/src/server/api/endpoints/admin/invite/list.ts b/packages/backend/src/server/api/endpoints/admin/invite/list.ts index 5d7a7f632c77fef17011494e403a6f81b8984351..d8bf6e286fb66c91c73812ff01feaf507da0b103 100644 --- a/packages/backend/src/server/api/endpoints/admin/invite/list.ts +++ b/packages/backend/src/server/api/endpoints/admin/invite/list.ts @@ -60,7 +60,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { } query.limit(ps.limit); - query.skip(ps.offset); + query.offset(ps.offset); const tickets = await query.getMany(); diff --git a/packages/backend/src/server/api/endpoints/admin/show-users.ts b/packages/backend/src/server/api/endpoints/admin/show-users.ts index 0a150d1dfd18f5dd9638c7b57c5e159796a49dce..2ae5bc3de35eb83beaddd7e3a321386782b6e550 100644 --- a/packages/backend/src/server/api/endpoints/admin/show-users.ts +++ b/packages/backend/src/server/api/endpoints/admin/show-users.ts @@ -105,7 +105,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { } query.limit(ps.limit); - query.skip(ps.offset); + query.offset(ps.offset); const users = await query.getMany(); diff --git a/packages/backend/src/server/api/endpoints/federation/instances.ts b/packages/backend/src/server/api/endpoints/federation/instances.ts index ddf1a178b1ebce4343a5dee3e4fd07cdc4b3995c..b140321f441fc41e059e26c9d2df27f1ea72edd4 100644 --- a/packages/backend/src/server/api/endpoints/federation/instances.ts +++ b/packages/backend/src/server/api/endpoints/federation/instances.ts @@ -126,7 +126,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { 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); }); diff --git a/packages/backend/src/server/api/endpoints/hashtags/search.ts b/packages/backend/src/server/api/endpoints/hashtags/search.ts index e2e00def792affdb027a1632e701d2d9701dc86a..81a790316b8d88a5d978105d1117d3a1d106e1d5 100644 --- a/packages/backend/src/server/api/endpoints/hashtags/search.ts +++ b/packages/backend/src/server/api/endpoints/hashtags/search.ts @@ -42,7 +42,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { .orderBy('tag.count', 'DESC') .groupBy('tag.id') .limit(ps.limit) - .skip(ps.offset) + .offset(ps.offset) .getMany(); return hashtags.map(tag => tag.name); diff --git a/packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts b/packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts index 0b4ccdcf200cc49199a9a77ca73dd835c9791a7e..889f6446431597c831566fb95774015840ef5045 100644 --- a/packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts +++ b/packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts @@ -83,7 +83,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { const polls = await query .orderBy('poll.noteId', 'DESC') .limit(ps.limit) - .skip(ps.offset) + .offset(ps.offset) .getMany(); if (polls.length === 0) return []; diff --git a/packages/backend/src/server/api/endpoints/users.ts b/packages/backend/src/server/api/endpoints/users.ts index 2582932e3a7b9b6ebc7b8d4975342841a475274b..47d0a8155259d780637ea66948e13a6c6d413308 100644 --- a/packages/backend/src/server/api/endpoints/users.ts +++ b/packages/backend/src/server/api/endpoints/users.ts @@ -81,7 +81,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { if (me) this.queryService.generateBlockQueryForUsers(query, me); query.limit(ps.limit); - query.skip(ps.offset); + query.offset(ps.offset); const users = await query.getMany(); diff --git a/packages/backend/src/server/api/endpoints/users/recommendation.ts b/packages/backend/src/server/api/endpoints/users/recommendation.ts index d39657059a8c621903ea2cb30c71f479a6fabaf9..eebc5d14d5e625ebeb56648726af54a5b91952ce 100644 --- a/packages/backend/src/server/api/endpoints/users/recommendation.ts +++ b/packages/backend/src/server/api/endpoints/users/recommendation.ts @@ -70,7 +70,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { 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 }); }); diff --git a/packages/backend/src/server/api/endpoints/users/search.ts b/packages/backend/src/server/api/endpoints/users/search.ts index 1180de36117cc6abab631ecbf7c6c332f6f58c18..836218ccd9e1cd604b1e653d368e6b303d7b6cfd 100644 --- a/packages/backend/src/server/api/endpoints/users/search.ts +++ b/packages/backend/src/server/api/endpoints/users/search.ts @@ -75,7 +75,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { users = await usernameQuery .orderBy('user.updatedAt', 'DESC', 'NULLS LAST') .limit(ps.limit) - .skip(ps.offset) + .offset(ps.offset) .getMany(); } else { const nameQuery = this.usersRepository.createQueryBuilder('user') @@ -102,7 +102,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { users = await nameQuery .orderBy('user.updatedAt', 'DESC', 'NULLS LAST') .limit(ps.limit) - .skip(ps.offset) + .offset(ps.offset) .getMany(); if (users.length < ps.limit) { @@ -128,7 +128,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { users = users.concat(await query .orderBy('user.updatedAt', 'DESC', 'NULLS LAST') .limit(ps.limit) - .skip(ps.offset) + .offset(ps.offset) .getMany(), ); } diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts index b5eea07775fe83b321b32b3277d95c0a864c22d1..363cca8feb951344107d30a74f86c8a6c3e6a5d0 100644 --- a/packages/backend/src/server/web/ClientServerService.ts +++ b/packages/backend/src/server/web/ClientServerService.ts @@ -3,7 +3,7 @@ import { dirname } from 'node:path'; import { fileURLToPath } from 'node:url'; import { Inject, Injectable } from '@nestjs/common'; 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 ms from 'ms'; import sharp from 'sharp'; @@ -168,7 +168,7 @@ export class ClientServerService { this.dbQueue, this.objectStorageQueue, this.webhookDeliverQueue, - ].map(q => new BullAdapter(q)), + ].map(q => new BullMQAdapter(q)), serverAdapter, }); diff --git a/packages/backend/src/server/web/views/gallery-post.pug b/packages/backend/src/server/web/views/gallery-post.pug index a458d7f8c7d6a2a82e6329e716c6717e77298d6c..9ae25d9ac845ae148cc5557c87f95e87259572f0 100644 --- a/packages/backend/src/server/web/views/gallery-post.pug +++ b/packages/backend/src/server/web/views/gallery-post.pug @@ -16,8 +16,12 @@ block og meta(property='og:title' content= title) meta(property='og:description' content= post.description) meta(property='og:url' content= url) - meta(property='og:image' content= post.files[0].thumbnailUrl) - meta(property='twitter:card' content='summary_large_image') + if post.isSensitive + 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 if user.host || profile.noCrawle diff --git a/packages/backend/test/e2e/note.ts b/packages/backend/test/e2e/note.ts index 33da811a263997796cf01906a2572c586b2c0ad6..39a296f1aa4b06bba476906e2af4d463075d2861 100644 --- a/packages/backend/test/e2e/note.ts +++ b/packages/backend/test/e2e/note.ts @@ -5,6 +5,7 @@ import { Note } from '@/models/entities/Note.js'; import { signup, post, uploadUrl, startServer, initTestDb, api, uploadFile } from '../utils.js'; import type { INestApplicationContext } from '@nestjs/common'; import type * as misskey from 'misskey-js'; +import { MAX_NOTE_TEXT_LENGTH } from '@/const.js'; describe('Note', () => { let app: INestApplicationContext; @@ -164,7 +165,7 @@ describe('Note', () => { test('æ–‡å—æ•°ãŽã‚ŠãŽã‚Šã§æ€’られãªã„', async () => { const post = { - text: '!'.repeat(3000), + text: '!'.repeat(MAX_NOTE_TEXT_LENGTH), // 3000æ–‡å— }; const res = await api('/notes/create', post, alice); assert.strictEqual(res.status, 200); @@ -172,7 +173,7 @@ describe('Note', () => { test('æ–‡å—数オーãƒãƒ¼ã§æ€’られる', async () => { const post = { - text: '!'.repeat(3001), + text: '!'.repeat(MAX_NOTE_TEXT_LENGTH + 1), // 3001æ–‡å— }; const res = await api('/notes/create', post, alice); assert.strictEqual(res.status, 400); diff --git a/packages/frontend/src/components/MkImgWithBlurhash.vue b/packages/frontend/src/components/MkImgWithBlurhash.vue index 4e36defb7c43a732433f7cd43ba24670cf66ace9..6dcc890cd353f417cc6f66215fda8d43452a20f8 100644 --- a/packages/frontend/src/components/MkImgWithBlurhash.vue +++ b/packages/frontend/src/components/MkImgWithBlurhash.vue @@ -108,8 +108,7 @@ function waitForDecode() { .then(() => { loaded = true; }, error => { - console.error('Error occurred during decoding image', img.value, error); - throw Error(error); + console.log('Error occurred during decoding image', img.value, error); }); } else { loaded = false; diff --git a/packages/frontend/src/components/MkMediaList.vue b/packages/frontend/src/components/MkMediaList.vue index be0aed652498bdef783a57e6438dfadfb5d94cec..0cdccfb1697fd6b4382a8dd34721fe8ff531374b 100644 --- a/packages/frontend/src/components/MkMediaList.vue +++ b/packages/frontend/src/components/MkMediaList.vue @@ -1,5 +1,5 @@ <template> -<div> +<div ref="root"> <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 @@ -22,8 +22,43 @@ </div> </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) { + // widthãŒ64未満ã¯ãŠã‹ã—ã„ã®ã§ãƒªãƒˆãƒ©ã‚¤ã™ã‚‹ + 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> -import { onMounted, watch, shallowRef } from 'vue'; +import { onMounted, onUnmounted, shallowRef } from 'vue'; import * as misskey from 'misskey-js'; import PhotoSwipeLightbox from 'photoswipe/lightbox'; import PhotoSwipe from 'photoswipe'; @@ -34,19 +69,33 @@ import XVideo from '@/components/MkMediaVideo.vue'; import * as os from '@/os'; import { FILE_TYPE_BROWSERSAFE } from '@/const'; import { defaultStore } from '@/store'; +import { getScrollContainer, getBodyScrollHeight } from '@/scripts/scroll'; const props = defineProps<{ mediaList: misskey.entities.DriveFile[]; raw?: boolean; }>(); +const root = shallowRef<HTMLDivElement>(); +const container = shallowRef<HTMLElement | null | undefined>(undefined); const gallery = shallowRef<HTMLDivElement>(); const pswpZIndex = os.claimZIndex('middle'); document.documentElement.style.setProperty('--mk-pswp-root-z-index', pswpZIndex.toString()); const count = $computed(() => props.mediaList.filter(media => previewable(media)).length); +let lightbox: PhotoSwipeLightbox | null; + +const popstateHandler = (): void => { + if (lightbox.pswp && lightbox.pswp.isOpen === true) { + lightbox.pswp.close(); + } +}; -function calcAspectRatio() { - if (!gallery.value) return; +/** + * アスペクト比をmediaListWithOneImageAppearanceã«åŸºã¥ã„ã¦ã„ã„æ„Ÿã˜ã«èª¿æ•´ã™ã‚‹ + * aspect-ratioã§ã¯ãªãheightを使ㆠ+ */ +async function calcAspectRatio() { + if (!gallery.value || !root.value) return; let img = props.mediaList[0]; @@ -55,29 +104,47 @@ function calcAspectRatio() { return; } - // アスペクト比上é™è¨å®šã§ã¯ã€æ¨ªé•·ã®å ´åˆã¯é«˜ã•ã‚’縮å°ã•ã›ã‚‹ - const ratioMax = (ratio: number) => `${Math.max(ratio, img.properties.width / img.properties.height).toString()} / 1`; + if (!container.value) container.value = getScrollContainer(root.value); + 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) { case '16_9': - gallery.value.style.aspectRatio = ratioMax(16 / 9); + gallery.value.style.height = heightMin(9 / 16); break; case '1_1': - gallery.value.style.aspectRatio = ratioMax(1); + gallery.value.style.height = heightMin(1); break; case '2_3': - gallery.value.style.aspectRatio = ratioMax(2 / 3); + gallery.value.style.height = heightMin(3 / 2); break; - default: - gallery.value.style.aspectRatio = ''; + default: { + 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; + } } -} -watch([defaultStore.reactiveState.mediaListWithOneImageAppearance, gallery], () => calcAspectRatio()); + gallery.value.style.aspectRatio = 'initial'; +} onMounted(() => { - const lightbox = new PhotoSwipeLightbox({ + calcAspectRatio(); + + lightbox = new PhotoSwipeLightbox({ dataSource: props.mediaList .filter(media => { if (media.type === 'image/svg+xml') return true; // svgã®webpublicã¯pngãªã®ã§true @@ -161,12 +228,7 @@ onMounted(() => { lightbox.init(); - window.addEventListener('popstate', () => { - if (lightbox.pswp && lightbox.pswp.isOpen === true) { - lightbox.pswp.close(); - return; - } - }); + window.addEventListener('popstate', popstateHandler); lightbox.on('beforeOpen', () => { 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 => { if (file.type === 'image/svg+xml') return true; // svgã®webpublic/thumbnailã¯pngãªã®ã§true // FILE_TYPE_BROWSERSAFEã«é©åˆã—ãªã„ã‚‚ã®ã¯ãƒ–ラウザã§è¡¨ç¤ºã™ã‚‹ã®ã«ä¸é©åˆ‡ @@ -203,7 +271,7 @@ const previewable = (file: misskey.entities.DriveFile): boolean => { &.n1 { grid-template-rows: 1fr; - // default (expand) + // default but fallback (expand) min-height: 64px; max-height: clamp( 64px, @@ -212,20 +280,20 @@ const previewable = (file: misskey.entities.DriveFile): boolean => { ); &.n116_9 { - min-height: none; - max-height: none; + min-height: initial; + max-height: initial; aspect-ratio: 16 / 9; // fallback } &.n11_1{ - min-height: none; - max-height: none; + min-height: initial; + max-height: initial; aspect-ratio: 1 / 1; // fallback } &.n12_3 { - min-height: none; - max-height: none; + min-height: initial; + max-height: initial; aspect-ratio: 2 / 3; // fallback } } diff --git a/packages/frontend/src/components/MkModal.vue b/packages/frontend/src/components/MkModal.vue index bb5c6c7aab7e08288ce060ea1ed27d854885b8d6..bc6e3e4171b641ccbe9178a87faff9651ab6c0ee 100644 --- a/packages/frontend/src/components/MkModal.vue +++ b/packages/frontend/src/components/MkModal.vue @@ -431,6 +431,7 @@ defineExpose({ margin: auto; padding: 32px; display: flex; + overflow: auto; @media (max-width: 500px) { padding: 16px; diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue index deeae6e9403653544309f2512269bb8257fe5e56..02431a45571db042c16ea16976d6d1eaa0237ac8 100644 --- a/packages/frontend/src/components/MkNote.vue +++ b/packages/frontend/src/components/MkNote.vue @@ -341,6 +341,7 @@ function reply(viaKeyboard = false): void { pleaseLogin(); os.post({ reply: appearNote, + channel: appearNote.channel, animation: !viaKeyboard, }, () => { focus(); @@ -758,6 +759,7 @@ function showReactions(): void { padding: 16px; border: dashed 1px var(--renote); border-radius: 8px; + overflow: clip; } .channel { diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue index 1f8a36b8de56106cc548a4258e5e4082938b9ebd..a40b9cd2bd45575d54a4c6e726a34d4e3a60c000 100644 --- a/packages/frontend/src/components/MkNoteDetailed.vue +++ b/packages/frontend/src/components/MkNoteDetailed.vue @@ -320,6 +320,7 @@ function reply(viaKeyboard = false): void { showMovedDialog(); os.post({ reply: appearNote, + channel: appearNote.channel, animation: !viaKeyboard, }, () => { focus(); @@ -595,6 +596,7 @@ if (appearNote.replyId) { padding: 16px; border: dashed 1px var(--renote); border-radius: 8px; + overflow: clip; } .channel { diff --git a/packages/frontend/src/components/MkNoteSimple.vue b/packages/frontend/src/components/MkNoteSimple.vue index 21be1454a7a0c51f1a462c4e9a85696a732b5b94..98ea91d6be6aa7a23e61ba149079cc4e39773ae1 100644 --- a/packages/frontend/src/components/MkNoteSimple.vue +++ b/packages/frontend/src/components/MkNoteSimple.vue @@ -37,7 +37,6 @@ const showContent = $ref(false); display: flex; margin: 0; padding: 0; - overflow: clip; font-size: 0.95em; } diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue index f516ccbad8180e62c9bd293ffecef0d798ef8607..0527811ab030fb6f284f786bc37123be0953fe34 100644 --- a/packages/frontend/src/components/MkPostForm.vue +++ b/packages/frontend/src/components/MkPostForm.vue @@ -540,7 +540,7 @@ function onCompositionEnd(ev: CompositionEvent) { } 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') { const file = item.getAsFile(); const lio = file.name.lastIndexOf('.'); @@ -907,7 +907,6 @@ defineExpose({ display: flex; flex-wrap: nowrap; gap: 4px; - margin-bottom: -10px; } .headerLeft { @@ -1025,7 +1024,7 @@ defineExpose({ } .targetNote { - padding: 10px 20px 16px 20px; + padding: 0 20px 16px 20px; } .withQuote { diff --git a/packages/frontend/src/components/MkTagCloud.vue b/packages/frontend/src/components/MkTagCloud.vue index 6e4e054aad1c3e6d99af972b7135643bf41add16..21e76b766b69f24dee701f3a66f8846d44ecba6b 100644 --- a/packages/frontend/src/components/MkTagCloud.vue +++ b/packages/frontend/src/components/MkTagCloud.vue @@ -16,8 +16,8 @@ import tinycolor from 'tinycolor2'; const loaded = !!window.TagCanvas; const SAFE_FOR_HTML_ID = 'abcdefghijklmnopqrstuvwxyz'; 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 idForTags = 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({ length: 16 }, () => SAFE_FOR_HTML_ID[Math.floor(Math.random() * SAFE_FOR_HTML_ID.length)]).join(''); let available = $ref(false); let rootEl = $shallowRef<HTMLElement | null>(null); let canvasEl = $shallowRef<HTMLCanvasElement | null>(null); diff --git a/packages/frontend/src/components/MkTimeline.vue b/packages/frontend/src/components/MkTimeline.vue index 2595ebc45d1b8cdcef1e37d869ab003e8f6f181f..062d0bd87ace88f5bba308ba948e527d91662f9a 100644 --- a/packages/frontend/src/components/MkTimeline.vue +++ b/packages/frontend/src/components/MkTimeline.vue @@ -38,14 +38,6 @@ const prepend = note => { } }; -const onUserAdded = () => { - tlComponent.pagingComponent?.reload(); -}; - -const onUserRemoved = () => { - tlComponent.pagingComponent?.reload(); -}; - let endpoint; let query; let connection; @@ -125,8 +117,6 @@ if (props.src === 'antenna') { listId: props.list, }); connection.on('note', prepend); - connection.on('userAdded', onUserAdded); - connection.on('userRemoved', onUserRemoved); } else if (props.src === 'channel') { endpoint = 'channels/timeline'; query = { diff --git a/packages/frontend/src/pages/custom-emojis-manager.vue b/packages/frontend/src/pages/custom-emojis-manager.vue index 359bbeadc3fd909a9a343c78ae33d93fa77c9999..c6f089420e408faad68415cf03068840f2bdae8d 100644 --- a/packages/frontend/src/pages/custom-emojis-manager.vue +++ b/packages/frontend/src/pages/custom-emojis-manager.vue @@ -110,7 +110,7 @@ const selectAll = () => { if (selectedEmojis.value.length > 0) { selectedEmojis.value = []; } else { - selectedEmojis.value = emojisPaginationComponent.value.items.map(item => item.id); + selectedEmojis.value = Array.from(emojisPaginationComponent.value.items.values(), item => item.id); } }; diff --git a/packages/frontend/src/pages/page.vue b/packages/frontend/src/pages/page.vue index 27a4cd059550dabedcc0253af0fba36c3c4df326..8b316c71823f0427effd4ee969801f1b22787c61 100644 --- a/packages/frontend/src/pages/page.vue +++ b/packages/frontend/src/pages/page.vue @@ -166,7 +166,7 @@ const headerActions = $computed(() => []); const headerTabs = $computed(() => []); definePageMetadata(computed(() => page ? { - title: computed(() => page.title || page.name), + title: page.title || page.name, avatar: page.user, path: `/@${page.user.username}/pages/${page.name}`, share: { diff --git a/packages/frontend/src/pages/settings/general.vue b/packages/frontend/src/pages/settings/general.vue index cfe5cd31e73cf1d204ec0dd97c3bfb418117dae2..31a288745ee34dc382090594ac3a4f8dc50b3069 100644 --- a/packages/frontend/src/pages/settings/general.vue +++ b/packages/frontend/src/pages/settings/general.vue @@ -258,6 +258,7 @@ watch([ showGapBetweenNotesInTimeline, instanceTicker, overridedDeviceKind, + mediaListWithOneImageAppearance, ], async () => { await reloadAsk(); }); diff --git a/packages/frontend/src/pages/settings/preferences-backups.vue b/packages/frontend/src/pages/settings/preferences-backups.vue index 1aa1a5f81c82d9034d624af9a18faa5b10e9ab64..535a8820d27dab94defbf0efa9b18b14e8a677df 100644 --- a/packages/frontend/src/pages/settings/preferences-backups.vue +++ b/packages/frontend/src/pages/settings/preferences-backups.vue @@ -32,7 +32,7 @@ </template> <script lang="ts" setup> -import { computed, onMounted, onUnmounted } from 'vue'; +import { computed, onMounted, onUnmounted, ref } from 'vue'; import { v4 as uuid } from 'uuid'; import FormSection from '@/components/form/section.vue'; import MkButton from '@/components/MkButton.vue'; @@ -93,15 +93,6 @@ const coldDeviceStorageSaveKeys: (keyof typeof ColdDeviceStorage.default)[] = [ 'darkTheme', 'syncDeviceDarkMode', 'plugins', - 'mediaVolume', - 'sound_masterVolume', - 'sound_note', - 'sound_noteMy', - 'sound_notification', - 'sound_chat', - 'sound_chatBg', - 'sound_antenna', - 'sound_channel', ]; const scope = ['clientPreferencesProfiles']; @@ -125,18 +116,18 @@ type Profile = { 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 }) .then(res => { - profiles = res || {}; + profiles.value = res || {}; }); function isObject(value: unknown): value is Record<string, unknown> { 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'); // Check if unnecessary properties exist @@ -147,9 +138,9 @@ function validate(profile: unknown): void { // Check if createdAt and updatedAt is 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 (Number.isNaN(new Date(profile.updatedAt).getTime())) { + if (Number.isNaN(new Date(profile.updatedAt as any).getTime())) { throw new Error('updatedAt is not Date'); } } else if (profile.updatedAt !== null) { @@ -181,14 +172,14 @@ function getSettings(): Profile['settings'] { } async function saveNew(): Promise<void> { - if (!profiles) return; + if (!profiles.value) return; const { canceled, result: name } = await os.inputText({ title: ts._preferencesBackups.inputName, }); 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({ title: ts._preferencesBackups.cannotSave, text: t('_preferencesBackups.nameAlreadyExists', { name }), @@ -212,7 +203,7 @@ function loadFile(): void { input.type = 'file'; input.multiple = false; input.onchange = async () => { - if (!profiles) return; + if (!profiles.value) return; if (!input.files || input.files.length === 0) return; const file = input.files[0]; @@ -233,7 +224,7 @@ function loadFile(): void { return os.alert({ type: 'error', 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> { - if (!profiles) return; + if (!profiles.value) return; - const profile = profiles[id]; + const profile = profiles.value[id]; const { canceled: cancel1 } = await os.confirm({ type: 'warning', @@ -312,23 +303,23 @@ async function applyProfile(id: string): Promise<void> { } async function deleteProfile(id: string): Promise<void> { - if (!profiles) return; + if (!profiles.value) return; const { canceled } = await os.confirm({ type: 'info', title: ts.delete, - text: t('deleteAreYouSure', { x: profiles[id].name }), + text: t('deleteAreYouSure', { x: profiles.value[id].name }), }); if (canceled) return; await os.apiWithDialog('i/registry/remove', { scope, key: id }); - delete profiles[id]; + delete profiles.value[id]; } 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({ type: 'info', @@ -349,25 +340,25 @@ async function save(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({ 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({ title: ts._preferencesBackups.cannotSave, text: t('_preferencesBackups.nameAlreadyExists', { name }), }); } - const registry = Object.assign({}, { ...profiles[id] }); + const registry = Object.assign({}, { ...profiles.value[id] }); const { canceled: cancel2 } = await os.confirm({ type: 'info', - title: ts._preferencesBackups.rename, + title: ts.rename, text: t('_preferencesBackups.renameConfirm', { old: registry.name, new: name }), }); if (cancel2) return; @@ -377,7 +368,7 @@ async function rename(id: string): Promise<void> { } function menu(ev: MouseEvent, profileId: string) { - if (!profiles) return; + if (!profiles.value) return; return os.popupMenu([{ text: ts._preferencesBackups.apply, @@ -387,8 +378,8 @@ function menu(ev: MouseEvent, profileId: string) { type: 'a', text: ts.download, icon: 'ti ti-download', - href: URL.createObjectURL(new Blob([JSON.stringify(profiles[profileId], null, 2)], { type: 'application/json' })), - download: `${profiles[profileId].name}.json`, + href: URL.createObjectURL(new Blob([JSON.stringify(profiles.value[profileId], null, 2)], { type: 'application/json' })), + download: `${profiles.value[profileId].name}.json`, }, null, { text: ts.rename, icon: 'ti ti-forms', @@ -402,16 +393,16 @@ function menu(ev: MouseEvent, profileId: string) { icon: 'ti ti-trash', action: () => deleteProfile(profileId), danger: true, - }], ev.currentTarget ?? ev.target); + }], (ev.currentTarget ?? ev.target ?? undefined) as unknown as HTMLElement | undefined); } onMounted(() => { // streamingã®user storage updateイベントを監視ã—ã¦æ›´æ–° connection?.on('registryUpdated', ({ scope: recievedScope, key, value }) => { 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; }); }); diff --git a/packages/frontend/src/scripts/aiscript/api.ts b/packages/frontend/src/scripts/aiscript/api.ts index 5453fe827db3eb84d364b5bc50db0198420b0f45..c8b90b4fd7c92f703972c1877ccbe015abb4a405 100644 --- a/packages/frontend/src/scripts/aiscript/api.ts +++ b/packages/frontend/src/scripts/aiscript/api.ts @@ -11,7 +11,6 @@ export function createAiScriptEnv(opts) { USER_NAME: $i ? values.STR($i.name) : values.NULL, USER_USERNAME: $i ? values.STR($i.username) : values.NULL, CUSTOM_EMOJIS: utils.jsToVal(customEmojis.value), - CURRENT_URL: values.STR(window.location.href), 'Mk:dialog': values.FN_NATIVE(async ([title, text, type]) => { await os.alert({ type: type ? type.value : 'info', @@ -48,5 +47,8 @@ export function createAiScriptEnv(opts) { utils.assertString(key); return utils.jsToVal(JSON.parse(miLocalStorage.getItem(`aiscript:${opts.storageKey}:${key.value}`))); }), + 'Mk:url': values.FN_NATIVE(() => { + return values.STR(window.location.href); + }), }; } diff --git a/packages/frontend/src/scripts/emoji-base.ts b/packages/frontend/src/scripts/emoji-base.ts index 3f05642d5700564ed3fcb94784872b8a5fa193f7..e91f2fa22dcb1f627d9826d8dec43ae360dff44d 100644 --- a/packages/frontend/src/scripts/emoji-base.ts +++ b/packages/frontend/src/scripts/emoji-base.ts @@ -2,7 +2,7 @@ const twemojiSvgBase = '/twemoji'; const fluentEmojiPngBase = '/fluent-emoji'; 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'); codes = codes.filter(x => x && x.length); const fileName = codes.join('-'); @@ -10,7 +10,7 @@ export function char2twemojiFilePath(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 if (codes[0]?.startsWith('1f1')) return char2twemojiFilePath(char); if (!codes.includes('200d')) codes = codes.filter(x => x !== 'fe0f'); diff --git a/packages/frontend/src/scripts/select-file.ts b/packages/frontend/src/scripts/select-file.ts index 44a58d6c7d61f36fa1e8093206e298130374ddc5..891da6eb78557fabc7b401843afeae270ee00265 100644 --- a/packages/frontend/src/scripts/select-file.ts +++ b/packages/frontend/src/scripts/select-file.ts @@ -12,7 +12,8 @@ export function chooseFileFromPc(multiple: boolean, keepOriginal = false): Promi input.type = 'file'; input.multiple = multiple; 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 => { res(driveFiles); diff --git a/packages/frontend/src/style.scss b/packages/frontend/src/style.scss index bd74db7c85dfd2c527f0ef2dc620b4dc841c0677..85ad442ba47d6a9c22941fe40688bbfc4a47ecdf 100644 --- a/packages/frontend/src/style.scss +++ b/packages/frontend/src/style.scss @@ -6,11 +6,13 @@ --marginHalf: 10px; --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) { --margin: var(--marginHalf); - --minBottomSpacing: calc(72px + max(12px, env(safe-area-inset-bottom, 0px))); } //--ad: rgb(255 169 0 / 10%); diff --git a/packages/frontend/src/ui/universal.vue b/packages/frontend/src/ui/universal.vue index 9ae43c39d360f29b7b0a7bafe3e70929bfb4bbc5..50866b23ed641d01fb0dd68f47b042ce428d194e 100644 --- a/packages/frontend/src/ui/universal.vue +++ b/packages/frontend/src/ui/universal.vue @@ -207,9 +207,11 @@ watch($$(navFooter), () => { if (navFooter) { navFooterHeight = navFooter.offsetHeight; document.body.style.setProperty('--stickyBottom', `${navFooterHeight}px`); + document.body.style.setProperty('--minBottomSpacing', 'var(--minBottomSpacingMobile)'); } else { navFooterHeight = 0; document.body.style.setProperty('--stickyBottom', '0px'); + document.body.style.setProperty('--minBottomSpacing', '0px'); } }, { immediate: true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 690b853f00fff6a800d851e269cfcf27b33d7bac..c7b9b8d2be571472fac7593180417419b7fd4f91 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -330,8 +330,8 @@ importers: specifier: github:misskey-dev/sharp-read-bmp version: github.com/misskey-dev/sharp-read-bmp/02d9dc189fa7df0c4bea09330be26741772dac01 slacc: - specifier: 0.0.9 - version: 0.0.9 + specifier: 0.0.10 + version: 0.0.10 strict-event-emitter-types: specifier: 2.0.0 version: 2.0.0 @@ -340,7 +340,7 @@ importers: version: 2.1.0 summaly: specifier: github:misskey-dev/summaly - version: github.com/misskey-dev/summaly/77dd5654bb82280b38c1f50e51a771c33f3df503 + version: github.com/misskey-dev/summaly/089a0ad8e8c780e5c088b1c528aa95c5827cbdcc systeminformation: specifier: 5.18.7 version: 5.18.7 @@ -390,6 +390,9 @@ importers: '@swc/core-darwin-x64': specifier: 1.3.56 version: 1.3.56 + '@swc/core-freebsd-x64': + specifier: 1.3.11 + version: 1.3.11 '@swc/core-linux-arm-gnueabihf': specifier: 1.3.56 version: 1.3.56 @@ -424,41 +427,44 @@ importers: specifier: ^4.0.7 version: 4.0.7 slacc-android-arm-eabi: - specifier: 0.0.9 - version: 0.0.9 + specifier: 0.0.10 + version: 0.0.10 slacc-android-arm64: - specifier: 0.0.9 - version: 0.0.9 + specifier: 0.0.10 + version: 0.0.10 slacc-darwin-arm64: - specifier: 0.0.9 - version: 0.0.9 + specifier: 0.0.10 + version: 0.0.10 slacc-darwin-universal: - specifier: 0.0.9 - version: 0.0.9 + specifier: 0.0.10 + version: 0.0.10 slacc-darwin-x64: - specifier: 0.0.9 - version: 0.0.9 + specifier: 0.0.10 + version: 0.0.10 slacc-freebsd-x64: - specifier: 0.0.9 - version: 0.0.9 + specifier: 0.0.10 + version: 0.0.10 slacc-linux-arm-gnueabihf: - specifier: 0.0.9 - version: 0.0.9 + specifier: 0.0.10 + version: 0.0.10 slacc-linux-arm64-gnu: - specifier: 0.0.9 - version: 0.0.9 + specifier: 0.0.10 + version: 0.0.10 slacc-linux-arm64-musl: - specifier: 0.0.9 - version: 0.0.9 + specifier: 0.0.10 + version: 0.0.10 slacc-linux-x64-gnu: - specifier: 0.0.9 - version: 0.0.9 + specifier: 0.0.10 + version: 0.0.10 + slacc-linux-x64-musl: + specifier: 0.0.10 + version: 0.0.10 slacc-win32-arm64-msvc: - specifier: 0.0.9 - version: 0.0.9 + specifier: 0.0.10 + version: 0.0.10 slacc-win32-x64-msvc: - specifier: 0.0.9 - version: 0.0.9 + specifier: 0.0.10 + version: 0.0.10 utf-8-validate: specifier: ^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) summaly: specifier: github:misskey-dev/summaly - version: github.com/misskey-dev/summaly/77dd5654bb82280b38c1f50e51a771c33f3df503 + version: github.com/misskey-dev/summaly/089a0ad8e8c780e5c088b1c528aa95c5827cbdcc vite-plugin-turbosnap: specifier: 1.0.2 version: 1.0.2 @@ -976,7 +982,7 @@ importers: dependencies: '@swc/cli': 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': specifier: 1.3.69 version: 1.3.69 @@ -7222,12 +7228,32 @@ packages: ts-dedent: 2.2.0 type-fest: 2.19.0 vue: 3.3.4 - vue-component-type-helpers: 1.8.5 + vue-component-type-helpers: 1.8.6 transitivePeerDependencies: - encoding - supports-color 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): resolution: {integrity: sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==} engines: {node: '>= 12.13'} @@ -7310,6 +7336,17 @@ packages: requiresBuild: 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: resolution: {integrity: sha512-LWwPo6NnJkH01+ukqvkoNIOpMdw+Zundm4vBeicwyVrkP+mC3kwVfi03TUFpQUz3kRKdw/QEnxGTj+MouCPbtw==} engines: {node: '>=10'} @@ -19097,8 +19134,8 @@ packages: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true - /slacc-android-arm-eabi@0.0.9: - resolution: {integrity: sha512-T5P5kJ5UwW3UMoPXqqHh9TpCnuCJDCoivoiuONDXrYPYKF8sKDPMVVg1x/KU9/m7e562x9vAMBrIyqFFbEW0Jw==} + /slacc-android-arm-eabi@0.0.10: + resolution: {integrity: sha512-U3dVBuM1m8rT1D/w6S4knJ/uscNwsCR+MKxSQFbgDJEh8Atv+ovuC+FMGuaBT4iOQjpMj5dWSsN3ZPjVeo3hgA==} engines: {node: '>= 10'} cpu: [arm] os: [android] @@ -19106,8 +19143,8 @@ packages: dev: false optional: true - /slacc-android-arm64@0.0.9: - resolution: {integrity: sha512-bcKB3ukcI5wWJa2clK/5cy6a4TKp51DRkdRuFgKLG05gBj1jbH+7+8iBPojljeY28LC2frmwVHGj3vDmkFUeYg==} + /slacc-android-arm64@0.0.10: + resolution: {integrity: sha512-guVp88sW+4j1clTSXMzyDJHG8ondVnd8/FMKXIOfzKCEwSwX3uBxsuyHqtGvXkEwyZAGsBUy13Ei/PZAwElwYA==} engines: {node: '>= 10'} cpu: [arm64] os: [android] @@ -19115,8 +19152,8 @@ packages: dev: false optional: true - /slacc-darwin-arm64@0.0.9: - resolution: {integrity: sha512-EspX0Hj6t0Afxbsyc6rY9mTOUQQrPVtWPwwNRaljGRorPyRDDefrU1OnJXRcwcIp0oCZrRrivRYlO7lai63EMw==} + /slacc-darwin-arm64@0.0.10: + resolution: {integrity: sha512-633qnOMTP7egvd5IeljAOku0tnxlBXSoCRu7HiT0yeXxN9y5Tbg2X2/FaRzstI36lClfIJ0Lavne4mOw/90z9A==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -19124,16 +19161,16 @@ packages: dev: false optional: true - /slacc-darwin-universal@0.0.9: - resolution: {integrity: sha512-oQySg+9MPyKI9rwwwhmSZQkPks2/rq3k1P5HKwUgnaFZDvDtS/hpDycB3BxSDqWdD5kVA8PLCVa8pt9T5KyKfg==} + /slacc-darwin-universal@0.0.10: + resolution: {integrity: sha512-x5kEqRMTEQTi3NCufPEukWvaWqcOL+7EkP18ZCCiajcWH83jWnT8DOSGOmmLYdrXd0B7ZZcbd8GyLp3i5zu8PA==} engines: {node: '>= 10'} os: [darwin] requiresBuild: true dev: false optional: true - /slacc-darwin-x64@0.0.9: - resolution: {integrity: sha512-9Xp7mVKKF2QvDiIZOBgwsDdL/+95KBiFTdbo+XtH6YKoh6zNw0aPpkA3JojsdSMYdGHUrxl8b7avhzI0USqeEg==} + /slacc-darwin-x64@0.0.10: + resolution: {integrity: sha512-5gQYboy/4T6Bj3sVXiCpM3EvF1sK/Zx1Nq5YBMUuYb2GzrIwywghHbCD6bK4JYGvNsLN7r4PC45ZUB4gVkU8yA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -19141,8 +19178,8 @@ packages: dev: false optional: true - /slacc-freebsd-x64@0.0.9: - resolution: {integrity: sha512-jRd8WmXZLU2mcxV7SN8CzZzGiwbpxtaTjLwrYMTryQZ2TFr1xd1r5mQfTN5sBiwu3tnyK5dmHnRAPy+215mOkQ==} + /slacc-freebsd-x64@0.0.10: + resolution: {integrity: sha512-Jmi5YszELef/aCzYto+LwiNGhCk5mrlJfTJU/pOI91HBbrZlV+aRyIsPCcxAMg5yPsPQuyRljrDouVYrPzNmjw==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] @@ -19150,8 +19187,8 @@ packages: dev: false optional: true - /slacc-linux-arm-gnueabihf@0.0.9: - resolution: {integrity: sha512-nhP6+jgd30sq+zFxFW7fGhnPwCfCCU0l1JKk3ORGFMl7wH7ippTDd1xGapKq7N+zgdgURbyj83P3wWb2gcRZ1w==} + /slacc-linux-arm-gnueabihf@0.0.10: + resolution: {integrity: sha512-9lTM3DGtISQlZYSKrMuQyKCiUnHYRcy04mY6HF1ywYcQ2sqfv3bKEnrypVewepIFUtytlIGzkgpiUAk/ghYGoA==} engines: {node: '>= 10'} cpu: [arm] os: [linux] @@ -19159,8 +19196,8 @@ packages: dev: false optional: true - /slacc-linux-arm64-gnu@0.0.9: - resolution: {integrity: sha512-x7v0rDe0KNVe1Hl6/XCtkCpqdT283pyVaUmk+af0AnoesNRjYEK8DBc8i53N4nhotionHzPIZfu5gPAFkf6RhA==} + /slacc-linux-arm64-gnu@0.0.10: + resolution: {integrity: sha512-qXrNWSINXOjHRO3c9idGm8DeOAjAjG1xHY8WiplCoHWgsZf3E7V+sPhWqRUaGQEvftsJg40+cFYREBaLQhpAVQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -19168,8 +19205,8 @@ packages: dev: false optional: true - /slacc-linux-arm64-musl@0.0.9: - resolution: {integrity: sha512-jyq/ylITHIXTQX5ZqAbi7Mn5SdRgYJi+uEoUCi5UhoXb9LjpNzhkFuY29Je3IkVIIV7AEcAxIlvjdymXdzcF5w==} + /slacc-linux-arm64-musl@0.0.10: + resolution: {integrity: sha512-3lUX7752f6Okn54aONioaA+9M5TvifqXBAart+u2lNXEdWmmh003cVSU2Vcwg7nJ9lLHtju2DkDmKKfJjFuShA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -19177,8 +19214,17 @@ packages: dev: false optional: true - /slacc-linux-x64-gnu@0.0.9: - resolution: {integrity: sha512-Xs/F81H7cKhlIBigFID6CJlgjy0NeDUGV1CI1MI5mSVHsVI8dUO8zXWETjo6o8krJPgfjT5Jd4tAgvUFct5hng==} + /slacc-linux-x64-gnu@0.0.10: + resolution: {integrity: sha512-BxxvylF9zlOLRLCpiyMvKTIUpdLlpetNBJ+DSMDh5+Ggq+AmQz2NUGawmcBJw58F8nMCj9TpWLlGNWc2AuY+JQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /slacc-linux-x64-musl@0.0.10: + resolution: {integrity: sha512-TYJi8LOtJiTFcZvka4du7bMjF9Bz1RHRwyLnScr5E5yjjgoLRrsvgSu7bxp87xH+rgJ3CdEwE3w3Ux8EiewHpA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -19186,8 +19232,8 @@ packages: dev: false optional: true - /slacc-win32-arm64-msvc@0.0.9: - resolution: {integrity: sha512-C+H0VkKbEEnRbcXRIG5rIaXlg7IZw3o1BbvqA71B8ouQRCu/dNRuH9EQsOYXWltndY42zZi8IupNIwydTUg+Mg==} + /slacc-win32-arm64-msvc@0.0.10: + resolution: {integrity: sha512-1CHPLiDB4exzFyT5ndtJDsRRhBxNg8mGz6I6eJEMjelGkJR2KZPT9LZuby/1bS/bcVOr7zuJvGNfbEGBeHRwPQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -19195,8 +19241,8 @@ packages: dev: false optional: true - /slacc-win32-x64-msvc@0.0.9: - resolution: {integrity: sha512-bElMnBbeMatCtVp2/+hBS6Z+846nQImEul9nBEr4gfezHotOM6MqR6PI7UQQzGhozpgwiDg2l1ub1MdOIgYizg==} + /slacc-win32-x64-msvc@0.0.10: + resolution: {integrity: sha512-wAXBy5yKCAzfYWjVlyPpu6PscD+j4QhCQEy0wZaVuzNyx60HpXWcTZxxVnMR730Y7tfc7cBxSI8NtRb8RguSgg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -19204,22 +19250,23 @@ packages: dev: false optional: true - /slacc@0.0.9: - resolution: {integrity: sha512-BwhjD3daQB3VIx7GxkComMYrnkWuMt4YmDAueMMchblfUUBbP8EcuonJ1Bz9nqtRn1mAH2YPrrRDP95akM+ZuQ==} + /slacc@0.0.10: + resolution: {integrity: sha512-2jgms2/4mLr1AMq4oloAwPdKQK9RQvgmoEpMIxvC+HeHMwCR0XxB7gr/rKo4iLOKJ6gx02mnBU0JHWcTIonpmA==} engines: {node: '>= 10'} optionalDependencies: - slacc-android-arm-eabi: 0.0.9 - slacc-android-arm64: 0.0.9 - slacc-darwin-arm64: 0.0.9 - slacc-darwin-universal: 0.0.9 - slacc-darwin-x64: 0.0.9 - slacc-freebsd-x64: 0.0.9 - slacc-linux-arm-gnueabihf: 0.0.9 - slacc-linux-arm64-gnu: 0.0.9 - slacc-linux-arm64-musl: 0.0.9 - slacc-linux-x64-gnu: 0.0.9 - slacc-win32-arm64-msvc: 0.0.9 - slacc-win32-x64-msvc: 0.0.9 + slacc-android-arm-eabi: 0.0.10 + slacc-android-arm64: 0.0.10 + slacc-darwin-arm64: 0.0.10 + slacc-darwin-universal: 0.0.10 + slacc-darwin-x64: 0.0.10 + slacc-freebsd-x64: 0.0.10 + slacc-linux-arm-gnueabihf: 0.0.10 + slacc-linux-arm64-gnu: 0.0.10 + slacc-linux-arm64-musl: 0.0.10 + slacc-linux-x64-gnu: 0.0.10 + slacc-linux-x64-musl: 0.0.10 + slacc-win32-arm64-msvc: 0.0.10 + slacc-win32-x64-msvc: 0.0.10 dev: false /slash@3.0.0: @@ -20982,8 +21029,8 @@ packages: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} - /vue-component-type-helpers@1.8.5: - resolution: {integrity: sha512-SBNsskF7L5x604V1BN4ZzdTtWgCqo5cfl//YuBXtc3LLyPdFRqUeJn2Q+FPNmCtl23LBT2tH79M/uv13fL0MgQ==} + /vue-component-type-helpers@1.8.6: + resolution: {integrity: sha512-vKWeoKVEV51ZzoB8+UY0apMXiifbPQxWlcZlvQRDVdiOHmEkCBClWeIGbqQ8cCR9P4j+oCyLW87sraZFMz/qnA==} dev: true /vue-docgen-api@4.64.1(vue@3.3.4): @@ -21585,8 +21632,8 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - github.com/misskey-dev/summaly/77dd5654bb82280b38c1f50e51a771c33f3df503: - resolution: {tarball: https://codeload.github.com/misskey-dev/summaly/tar.gz/77dd5654bb82280b38c1f50e51a771c33f3df503} + github.com/misskey-dev/summaly/089a0ad8e8c780e5c088b1c528aa95c5827cbdcc: + resolution: {tarball: https://codeload.github.com/misskey-dev/summaly/tar.gz/089a0ad8e8c780e5c088b1c528aa95c5827cbdcc} name: summaly version: 4.0.2 dependencies: