diff --git a/.config/example.yml b/.config/example.yml index 8b9d9b482..7817578d9 100644 --- a/.config/example.yml +++ b/.config/example.yml @@ -138,9 +138,6 @@ id: 'aid' # Proxy remote files (default: false) #proxyRemoteFiles: true -# Sign to ActivityPub GET request (default: false) -#signToActivityPubGet: true - #allowedPrivateNetworks: [ # '127.0.0.1/32' #] diff --git a/.gitignore b/.gitignore index 5dd72c88f..bdd900040 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,9 @@ packages/sw/.yarn/cache cypress/screenshots cypress/videos +# Coverage +coverage + # config /.config/* !/.config/example.yml diff --git a/.yarnrc.yml b/.yarnrc.yml index de253e72e..788c5deb0 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -15,6 +15,9 @@ packageExtensions: chartjs-adapter-date-fns@*: peerDependencies: date-fns: "*" + swiper@*: + peerDependencies: + vue: "*" consolidate@*: dependencies: ejs: "*" diff --git a/CALCKEY.md b/CALCKEY.md index bcc90df2b..d2ab61372 100644 --- a/CALCKEY.md +++ b/CALCKEY.md @@ -3,10 +3,10 @@ ## Planned - MFM button -- Make more of the post clickable like every other SNS -- Better Messaging UI - Classic mode make instance icon bring up new context menu - Like/star button +- Backfill remote users +- User "choices" (recommended users) like Mastodon and Soapbox - Option to publicize instance blocks - Better intro/onboarding - Fully revamp non-logged-in screen @@ -21,8 +21,12 @@ ## Work in progress +- Better Messaging UI + - Videos can be played in DMs +- Make your password hasn't been pwned - OCR image captioning - Admin custom CSS +- Add back time machine (jump to date) - Improve accesibility score
Current Misskey score is 57/100 @@ -34,36 +38,51 @@ - Yarn 3 - Fix Dockerfile @hanna + - Upgrade packages with security vunrabilities - Saner defaults - Recommended instances timeline +- Improve mobile UX + - Swipe through pages on mobile + - Redesigned mobile bottom nav bar + - Post button on TL - Star as default reaction - Rosé Pine by default (+ non-themable elements made Rosé Pine) - Better sidebar/navbar +- Add back groups - MOTD (customizable by admins!) - Custom randomized splash icons - Self hosted, newly designed error images - Illustrated by [Henki](https://www.youtube.com/c/Henkiwashere)! - Licensed under the CC-BY-SA 4.0. -- [Profile background as banner](https://codeberg.org/Freeplay/Misskey-Tweaks/src/branch/main/snippets/profile-background.styl) - Better timeline top bar +- Improved note style + - Make more of the post clickable like every other SNS + - No more details tag for reply attachments + - Better CW button - Mark as read from notifications widget - Less cluttered notification summary - Better welcome screen (not logged in) +- vue-plyr as video/audio player - Ability to turn off "Connection lost" message - Raw instance info only for moderators - New spinner animation - Spinner instead of "Loading..." - SearchX instead of Google +- Always signToActivityPubGet - Spacing on group items - Quotes have solid border - Reply limit bug fixed - Make showing the update popup optional +- Improve PWA manifest +- Fix incoming chat scrolling globally - Obliteration of Ai-chan - [Make showing ads optional](https://github.com/misskey-dev/misskey/pull/8996) +- [Tapping avatar in mobile opens account modal](https://github.com/misskey-dev/misskey/pull/9056) - [OAuth bearer token authentication](https://github.com/misskey-dev/misskey/pull/9021) - [Styled Repair Tools](https://github.com/misskey-dev/misskey/pull/8956) - [Option to make enter send message](https://github.com/misskey-dev/misskey/pull/8954) - [Autocomplete in messaging](https://github.com/misskey-dev/misskey/pull/8955) +- [Profile background as banner](https://codeberg.org/Freeplay/Misskey-Tweaks/src/branch/main/snippets/profile-background.styl) - [Star is generic like/favorite](https://github.com/JakeMBauer/Misskey-Extras/blob/master/patches/star-is-like.patch) - 👍 also triggers generic like/favorite - [Add additional background for acrylic popups if backdrop-filter is unsupported](https://github.com/misskey-dev/misskey/pull/8671) @@ -89,3 +108,6 @@ - 585e4f5c42cfafb6cdf7eb601ab435d6a4d85a96: fix textarea not updating properly - 30d8bc9259cb6b72ed76d67b21dbb4cdceca8327: refactor: welcome.setup.vue to composition api - 751921e24f37ed707fe44a40d88eebb1299efa35: make emoji picker case insensitive + - 298febeb9c9501e3e3df16982c08657d1da474e0: enhance: add re-collapsing to quoted notes + - b0fdedb264db87575063abed45e52ad71ce4a6af: fix lints in folder.vue + - 6fed87f85d132304eb84b0a59b84dce299a1822f: fix pagination.vue lints diff --git a/CHANGELOG.md b/CHANGELOG.md index 73d3a5842..7dfa71cdf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,10 +9,17 @@ You should also include the user name that made the change. --> -## 12.x.x (unreleased) +## 12.119.0 (2022/09/10) ### Improvements - Client: Add following badge to user preview popup @nvisser +- Client: mobile twitter url can be used as widget @caipira113 +- Client: Improve clock widget @syuilo + +### Bugfixes +- マイグレーションに失敗する問題を修正 +- Server: 他人の通知を既読にできる可能性があるのを修正 @syuilo +- Client: アクセストークン管理画面、アカウント管理画面表示できないのを修正 @futchitwo ## 12.118.1 (2022/08/08) diff --git a/Dockerfile b/Dockerfile index 2fecca15d..7bc350648 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM node:alpine ENV YARN_CHECKSUM_BEHAVIOR=update ARG NODE_ENV=production -WORKDIR /misskey +WORKDIR /calckey # Copy Files COPY . ./ diff --git a/README.md b/README.md index 637a14176..2bd90a94b 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,13 @@ - Calckey adds many quality of life changes and bug fixes for users and instance admins alike. - Read **[this document](./CALCKEY.md)** all for current and future differences. - Notable differences: - - Improved UI/UX, notifications, security, and more + - Improved UI/UX (especially on mobile) + - Improved notifications + - Improved instance security - Recommended Instances timeline + - New and improved Groups - Many more user and admin settings + - [So much more!](./CALCKEY.md) diff --git a/chart/files/default.yml b/chart/files/default.yml index a9ef22f42..91a947f26 100644 --- a/chart/files/default.yml +++ b/chart/files/default.yml @@ -154,9 +154,6 @@ id: "aid" # Media Proxy #mediaProxy: https://example.com/proxy -# Sign to ActivityPub GET request (default: false) -#signToActivityPubGet: true - #allowedPrivateNetworks: [ # '127.0.0.1/32' #] diff --git a/locales/cs-CZ.yml b/locales/cs-CZ.yml index ff8a7ae8b..9d54e0082 100644 --- a/locales/cs-CZ.yml +++ b/locales/cs-CZ.yml @@ -206,6 +206,7 @@ instanceFollowers: "Následovníci na instanci" instanceUsers: "Uživatelé této instance" changePassword: "Změnit heslo" security: "Zabezpečení" +retypedNotMatch: "Zadané údaje se neshodují." currentPassword: "Současné heslo" newPassword: "Nové heslo" newPasswordRetype: "Nové heslo (znovu)" @@ -268,6 +269,7 @@ addFile: "Přidat soubor" emptyFolder: "Tato složka je prázdná" unableToDelete: "Nelze smazat" inputNewFileName: "Zadejte nový název" +inputNewFolderName: "Zadejte název nové složky" copyUrl: "Kopírovat URL" rename: "Přejmenovat" avatar: "Avatar" @@ -310,9 +312,11 @@ pinnedUsers: "Připnutí uživatelé" pinnedNotes: "Připnutá poznámka" hcaptcha: "hCaptcha" enableHcaptcha: "Aktivovat hCaptchu" +hcaptchaSiteKey: "Klíč stránky" hcaptchaSecretKey: "Tajný Klíč (Secret Key)" recaptcha: "reCAPTCHA" enableRecaptcha: "Zapnout ReCAPTCHu" +recaptchaSiteKey: "Klíč stránky" recaptchaSecretKey: "Tajný Klíč (Secret Key)" antennas: "Antény" manageAntennas: "Spravovat Antény" @@ -321,6 +325,10 @@ antennaSource: "Zdroj Antény" enableServiceworker: "Povolit ServiceWorker" caseSensitive: "Rozlišuje malá a velká písmena" connectedTo: "Následující účty jsou připojeny" +notesAndReplies: "Poznámky a odpovědi" +withFiles: "Včetně souborů" +popularUsers: "Populární uživatelé" +recentlyUpdatedUsers: "Nedávno aktívni uživatelé" popularTags: "Populární tagy" userList: "Seznamy" about: "Informace" @@ -365,10 +373,14 @@ next: "Další" retype: "Zadejte znovu" noteOf: "{user} poznámky" inviteToGroup: "Pozvat do skupiny" +quoteAttached: "Citace" +quoteQuestion: "Přiložit jako citaci?" +noMessagesYet: "Zatím tu nejsou žádné zprávy" newMessageExists: "Máte novou zprávu" onlyOneFileCanBeAttached: "Ke zprávě můžete přiložit jenom jeden soubor" signinRequired: "Přihlašte se, prosím" invitations: "Pozvat" +invitationCode: "Kód pozvánky" checking: "Ověřuji" available: "K dispozici" unavailable: "Není k dispozici" @@ -382,6 +394,7 @@ passwordMatched: "Hesla se schodují" passwordNotMatched: "Hesla se neschodují" signinWith: "Přihlásit se s {x}" signinFailed: "Nelze se přihlásit. Zkontrolujte prosím své uživatelské jméno a heslo." +tapSecurityKey: "Ťukněte na bezpečnostní klíč" or: "Nebo" language: "Jazyk" uiLanguage: "Jazyk uživatelského rozhraní" @@ -411,9 +424,20 @@ accountSettings: "Nastavení účtu" promotion: "Propagace" promote: "Propagovat" numberOfDays: "Počet dní" +objectStorageBaseUrl: "Base URL" +objectStorageBucket: "Bucket" +objectStoragePrefix: "Předpona" +objectStorageEndpoint: "Endpoint" +objectStorageRegion: "Región" +objectStorageUseSSL: "Použít SSL" deleteAll: "Smazat vše" showFixedPostForm: "Zobrazit formulář pro nové příspěvky nad časovou osou" +listen: "Poslouchat" +showInPage: "Zobrazit na stránce" +popout: "Pop-out" +volume: "Hlasitost" masterVolume: "Celková hlasitost" +details: "Detaily" chooseEmoji: "Vybrat emotikon" unableToProcess: "Operace nebyla dokončena." recentUsed: "Naposledy použité" @@ -434,13 +458,20 @@ deleteAllFiles: "Smazat všechny soubory" deleteAllFilesConfirm: "Jste si jistí že chcete smazat všechny soubory?" userSuspended: "Tomuto uživateli byl pozastaven účet." menu: "Menu" +divider: "Dělící čára" addItem: "Přidat položku" +relays: "Relay" +addRelay: "Přidat Relay" inboxUrl: "Inbox URL" deletedNote: "Odstraněné příspěvky" invisibleNote: "Skryté příspěvky" description: "Popis" author: "Autor" manage: "Administrace" +width: "Šířka" +height: "Výška" +large: "Velké" +medium: "Střední" small: "Malé" generateAccessToken: "Vygenerovat přístupový token" permission: "Oprávnění" @@ -458,11 +489,16 @@ smtpPort: "Port" smtpUser: "Uživatelské jméno" smtpPass: "Heslo" smtpSecureInfo: "Toto vypněte pokud používáte STARTTLS" +testEmail: "Otestovat doručení emailů" makeActive: "Aktivovat" display: "Zobrazit" copy: "Kopírovat" +metrics: "Metriky" +overview: "Shrnutí" logs: "Logy" +delayed: "Prodleva" database: "Databáze" +channel: "Kanály" create: "Vytvořit" notificationSetting: "Nastavení oznámení" useGlobalSetting: "Použít globální nastavení" @@ -470,79 +506,415 @@ other: "Ostatní" fileIdOrUrl: "ID nebo URL souboru" behavior: "Chování" sample: "Ukázka" +send: "Odeslat" +openInNewTab: "Otevřít v nové kartě" +random: "Náhodně" +system: "Systém" +desktop: "Plocha" +clip: "Oříznout" +createNew: "Vytvořit nový" +optional: "Volitelné" +yes: "Ano" +no: "Ne" +notSet: "Není nastaveno" +emailVerified: "Váš e-mail byl ověřen" +contact: "Kontakt" +useSystemFont: "Použít výchozí font systému" +clips: "Oříznout" +experimentalFeatures: "Experimentální funkce" +developer: "Vývojář" +duplicate: "Duplikovat" +left: "Vlevo" +center: "Uprostřed" +wide: "Široké" +narrow: "Úzké" clearCache: "Vyprázdnit mezipaměť" +nUsers: "{n} užívatelů" +nNotes: "{n} poznámek" +myTheme: "Moje vzhledy" +backgroundColor: "Pozadí" +accentColor: "Akcent" +textColor: "Barva textu" +saveAs: "Uložit jako…" +advanced: "Pokročilé" +value: "Hodnota" +createdAt: "Vytvořeno" +updatedAt: "Upraveno" +saveConfirm: "Uložit změny?" +deleteConfirm: "Opravdu smazat?" +invalidValue: "Neplatná hodnota." +registry: "Registr" info: "Informace" +unknown: "Neznámý" +onlineStatus: "Online status" +hideOnlineStatus: "Skrýt Váš online status" +hideOnlineStatusDescription: "Skrytí vašeho online stavu může snížit funkcionalitu některých funkcí, například vyhledávání." +online: "Online" +active: "Aktivní" +offline: "Offline" +notRecommended: "Nedoporučuje se" +botProtection: "Bot ochrana" +instanceBlocking: "Blokované instance" +selectAccount: "Vybrat účet" +switchAccount: "Přepnout účet" +enabled: "Zapnuto" +disabled: "Vypnuto" +quickAction: "Rychlé akce" user: "Uživatelé" administration: "Administrace" +accounts: "Účty" +switch: "Přepnout" +configure: "Nastavit" +gallery: "Galerie" +recentPosts: "Poslední příspěvky" +ads: "Reklamy" +memo: "Memo" +priority: "Priorita" +high: "Vysoká" +middle: "Střední" +low: "Nízká" +emailNotConfiguredWarning: "E-mailová adresa není nastavena." +ratio: "Poměr" +global: "Globální" +sent: "Odeslat" +hashtags: "Hashtagy" +troubleshooting: "Poradce při potížích" +whatIsNew: "Zobrazit změny" +translate: "Přeložit" +hide: "Skrýt" +smartphone: "Telefon" +tablet: "Tablet" +auto: "Auto" +size: "Velikost" +numberOfColumn: "Počet sloupců" searchByGoogle: "Vyhledávání" +indefinitely: "Navždy" +tenMinutes: "10 minut" +oneHour: "1 hodina" +oneDay: "1 den" +oneWeek: "1 týden" +reflectMayTakeTime: "Může trvat nějakou dobu, než se projeví změny." +cropImage: "Oříznout obrázek" file: "Soubor(ů)" +recentNHours: "Posledních {n} hodin" +recentNDays: "Posledních {n} dnů" +recommended: "Doporučeno" +deleteAccount: "Odstranit účet" +document: "Dokumentace" +logoutConfirm: "Opravdu se chcete odhlásit?" +pleaseSelect: "Vybrat možnost" +reverse: "Otočit" +colored: "Barevné" +type: "Typ" +speed: "Rychlost" +slow: "Pomalá" +fast: "Rychlá" +account: "Účty" +_ad: + back: "Zpět" +_gallery: + my: "Moje galerie" _email: _follow: title: "Máte nového následovníka" +_plugin: + install: "Instalovat plugin" + manage: "Správce pluginů" +_preferencesBackups: + list: "Vytvořit backup" + loadFile: "Načíst ze souboru" + save: "Uložit změny" +_registry: + scope: "Rozsah" + key: "Klíč" + keys: "Klíče" + domain: "Doména" + createKey: "Vytvořit klíč" +_aboutMisskey: + allContributors: "Všichni přispěvatelé" + source: "Zdrojový kód" _mfm: mention: "Zmínění" + hashtag: "Hashtag" + link: "Odkaz" + bold: "Tučně" quote: "Citovat" emoji: "Vlastní emoji" search: "Vyhledávání" + flip: "Otočit" + tada: "Animace (tadá)" + blur: "Rozmazání" + font: "Font" + rainbow: "Duha" +_channel: + featured: "Trendy" +_menuDisplay: + top: "Nahoru" + hide: "Skrýt" _theme: + install: "Nainstalovat vzhled" + manage: "Správa vzhledů" + code: "Kód vzhledu" description: "Popis" + installedThemes: "Nainstalované vzhledy" + constant: "Konstanta" + defaultValue: "Výchozí hodnota" + color: "Barva" + key: "Klíč" + func: "Funkce " keys: + shadow: "Stín" + header: "Nadpis" + link: "Odkaz" + hashtag: "Hashtag" mention: "Zmínění" renote: "Přeposlat" + divider: "Dělící čára" _sfx: note: "Poznámky" notification: "Oznámení" chat: "Zprávy" +_ago: + future: "Budoucí" + justNow: "Teď" +_time: + second: "Sekund" + minute: "Minut" + hour: "Hodin" +_2fa: + registerDevice: "Přidat zařízení" + registerKey: "Přidat bezpečnostní klíč" +_weekday: + sunday: "Neděle" + monday: "Pondělí" + tuesday: "Úterý" + wednesday: "Středa" + thursday: "Čtvrtek" + friday: "Pátek" + saturday: "Sobota" _widgets: notifications: "Oznámení" timeline: "Časová osa" + calendar: "Kalendář" + trends: "Trendy" + clock: "Hodiny" + rss: "RSS čtečka" activity: "Aktivita" + photos: "Fotky" + digitalClock: "Digitální hodiny" federation: "Federace" + slideshow: "Prezentace" + button: "Tlačítko" + onlineUsers: "Online uživatelé" jobQueue: "Fronta úloh" + aiscript: "AiScript conzole" + aichan: "Ai" _cw: + hide: "Skrýt" show: "Zobrazit více" +_poll: + noMore: "Více už přidat nemůžete" + infinite: "Nikdy" + deadlineDate: "Datum ukončení" + deadlineTime: "Hodin" + duration: "Trvání" _visibility: home: "Domů" followers: "Sledující" +_postForm: + _placeholders: + f: "Čekám, až něco napíšete..." _profile: name: "Jméno" username: "Uživatelské jméno" + description: "O mně" + youCanIncludeHashtags: "V popisku o Vás můžete použít i hastagy." + metadata: "Doplňující informace" + metadataContent: "Obsah" _exportOrImport: + allNotes: "Všechny poznámky" followingList: "Sledovaní" muteList: "Ztlumit" blockingList: "Zablokovat" userLists: "Seznamy" _charts: federation: "Federace" + apRequest: "Požadavek" + usersTotal: "Celkem uživatelů" + activeUsers: "Aktivní uživatelé" + notesTotal: "Celkový počet poznámek" _timelines: home: "Domů" + global: "Globální" _pages: + newPage: "Vytvořit novou stránku" + editPage: "Upravit stránku" + created: "Stránka byla úspěšně vytvořena" + updated: "Stránka byla úspěšně aktualizována" + deleted: "Stránka byla úspěšně smazána" + pageSetting: "Nastavení stránky" + invalidNameText: "Ujistěte se že jméno stránky je vyplněno" + contents: "Obsah" + fontSerif: "Serif" + fontSansSerif: "Sans Serif" + chooseBlock: "Přidat blok" + selectType: "Vyberte typ" + contentBlocks: "Obsah" + inputBlocks: "Vstup" + specialBlocks: "Speciální" blocks: + text: "Text" + textarea: "Textové pole" + section: "Sekce" image: "Obrázky" + button: "Tlačítko" + if: "Pokud" + _if: + variable: "Proměnná" + _post: + text: "Obsah" + canvasId: "Canvas ID" + _textInput: + name: "Jméno proměnné" + text: "Titulek" + default: "Výchozí hodnota" + _textareaInput: + name: "Jméno proměnné" + text: "Titulek" + default: "Výchozí hodnota" + _numberInput: + name: "Jméno proměnné" + text: "Titulek" + default: "Výchozí hodnota" + canvas: "Canvas" + _canvas: + id: "Canvas ID" + width: "Šířka" + height: "Výška" + _switch: + name: "Jméno proměnné" + text: "Titulek" + default: "Výchozí hodnota" + _counter: + name: "Jméno proměnné" + text: "Titulek" + inc: "Krok" + _button: + text: "Titulek" + colored: "Barevné" + _action: + _dialog: + content: "Obsah" + _radioButton: + name: "Jméno proměnné" + default: "Výchozí hodnota" script: categories: list: "Seznamy" blocks: + text: "Text" + _strLen: + arg1: "Text" + _strPick: + arg1: "Text" + _strReplace: + arg1: "Text" + _strReverse: + arg1: "Text" _join: arg1: "Seznamy" + _subtract: + arg1: "A" + arg2: "B" + _multiply: + arg1: "A" + arg2: "B" + _divide: + arg1: "A" + arg2: "B" + _mod: + arg1: "A" + arg2: "B" + round: "Zaokrouhlení zlomku" + _round: + arg1: "Číselná hodnota" + eq: "A a B jsou stejné" + _eq: + arg1: "A" + arg2: "B" + notEq: "A a B jsou odlišné" + _notEq: + arg1: "A" + arg2: "B" + _and: + arg1: "A" + arg2: "B" + _or: + arg1: "A" + arg2: "B" + _lt: + arg1: "A" + arg2: "B" + _gt: + arg1: "A" + arg2: "B" + _ltEq: + arg1: "A" + arg2: "B" + _gtEq: + arg1: "A" + arg2: "B" + if: "Větev" + _if: + arg1: "Pokud" + arg2: "Potom" + arg3: "Nebo" + random: "Náhodně" + _random: + arg1: "Pravděpodobnost" + rannum: "Náhodné číslo" + _rannum: + arg1: "Minimální hodnota" + arg2: "Maximální hodnota" _randomPick: arg1: "Seznamy" + _dailyRandom: + arg1: "Pravděpodobnost" + _dailyRannum: + arg1: "Minimální hodnota" + arg2: "Maximální hodnota" _dailyRandomPick: arg1: "Seznamy" + _seedRandom: + arg2: "Pravděpodobnost" + _seedRannum: + arg2: "Minimální hodnota" + arg3: "Maximální hodnota" _seedRandomPick: arg2: "Seznamy" _pick: arg1: "Seznamy" _listLen: arg1: "Seznamy" + number: "Číselná hodnota" + _stringToNumber: + arg1: "Text" + _numberToString: + arg1: "Číselná hodnota" + _splitStrByLine: + arg1: "Text" types: + string: "Text" + number: "Číselná hodnota" array: "Seznamy" _notification: youWereFollowed: "Máte nového následovníka" youWereInvitedToGroup: "Pozvat do skupiny" _types: + all: "Vše" follow: "Sledovaní" mention: "Zmínění" + reply: "Odpovědi" renote: "Přeposlat" quote: "Citovat" reaction: "Reakce" diff --git a/locales/en-US.yml b/locales/en-US.yml index f64a7c20d..bfde20c5c 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -134,7 +134,7 @@ emoji: "Emoji" emojis: "Emoji" emojiName: "Emoji name" emojiUrl: "Emoji URL" -addEmoji: "Add an emoji" +addEmoji: "Add" settingGuide: "Recommended settings" cacheRemoteFiles: "Cache remote files" cacheRemoteFilesDescription: "When this setting is disabled, remote files are loaded directly from the remote instance. Disabling this will decrease storage usage, but increase traffic, as thumbnails will not be generated." @@ -783,7 +783,7 @@ emailNotConfiguredWarning: "Email address not set." ratio: "Ratio" secureMode: "Secure Mode (Authorized Fetch)" instanceSecurity: "Instance Security" -secureModeInfo: "When requesting from other instances, do not send back without proof. signToActivityPubGet must be true in the other instance's configuration file." +secureModeInfo: "When requesting from other instances, do not send back without proof." privateMode: "Private Mode" privateModeInfo: "When enabled, only whitelisted instances can federate with your instances. All notes will be hidden from the public." allowedInstances: "Whitelisted Instances" @@ -989,7 +989,7 @@ _registry: domain: "Domain" createKey: "Create key" _aboutMisskey: - about: "Calckey is a fork of Misskey made by ThatOneCalculator being developed since 2022." + about: "Calckeyは、2022年から開発されているThatOneCalculator社製のMisskeyのforkです。" contributors: "Main contributors" allContributors: "All contributors" source: "Source code" diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index ecd30b42d..c0b244cbc 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -379,7 +379,7 @@ exploreFediverse: "Fediverseを探索" popularTags: "人気のタグ" userList: "リスト" about: "情報" -aboutMisskey: "Misskeyについて" +aboutMisskey: "Calckeyについて" administrator: "管理者" token: "トークン" twoStepAuthentication: "二段階認証" diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index 168fa9d65..d77f7e920 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -562,6 +562,7 @@ author: "작성자" leaveConfirm: "저장하지 않은 변경사항이 있습니다. 취소하시겠습니까?" manage: "관리" plugins: "플러그인" +preferencesBackups: "환경설정 백업" deck: "덱" undeck: "덱 해제" useBlurEffectForModal: "모달에 흐림 효과 사용" @@ -612,7 +613,7 @@ create: "생성" notificationSetting: "알림 설정" notificationSettingDesc: "표시할 알림의 종류를 선택해 주세요." useGlobalSetting: "글로벌 설정을 사용하기" -useGlobalSettingDesc: "활성화하면 계정의 알림 설정이 적용되니다. 비활성화하면 개별적으로 설정할 수 있게 됩니다." +useGlobalSettingDesc: "활성화하면 계정의 알림 설정이 적용됩니다. 비활성화하면 개별적으로 설정할 수 있게 됩니다." other: "기타" regenerateLoginToken: "로그인 토큰을 재생성" regenerateLoginTokenDescription: "로그인할 때 사용되는 내부 토큰을 재생성합니다. 일반적으로 이 작업을 실행할 필요는 없습니다. 이 기능을 사용하면 이 계정으로 로그인한 모든 기기에서 로그아웃됩니다." @@ -941,6 +942,24 @@ _plugin: install: "플러그인 설치" installWarn: "신뢰할 수 없는 플러그인은 설치하지 않는 것이 좋습니다." manage: "플러그인 관리" +_preferencesBackups: + list: "생성한 백업" + saveNew: "새 백업 만들기" + loadFile: "파일 가져오기" + apply: "이 기기에 적용" + save: "현재 설정으로 덮어쓰기" + inputName: "백업 이름을 입력하세요" + cannotSave: "저장하지 못했습니다" + nameAlreadyExists: "\"{name}\" 백업이 이미 존재합니다. 다른 이름을 설정하여 주십시오." + applyConfirm: "\"{name}\" 백업을 현재 기기에 적용하시겠습니까? 현재 설정은 덮어 씌워집니다." + saveConfirm: "{name} 을 덮어쓰시겠습니까?" + deleteConfirm: "{name} 을(를) 삭제하시겠습니까?" + renameConfirm: "\"{old}\" 백업을 \"{new}\"(으)로 바꾸시겠습니까?" + noBackups: "저장된 백업이 없습니다. \"새 백업 만들기\"를 눌러 현재 클라이언트 설정을 서버에 백업할 수 있습니다." + createdAt: "생성 날짜: {date} {time}" + updatedAt: "갱신 날짜: {date} {time}" + cannotLoad: "가져오기에 실패했습니다" + invalidFile: "파일 형식이 올바르지 않습니다." _registry: scope: "범위" key: "키" @@ -1258,6 +1277,7 @@ _widgets: activity: "활동" photos: "사진" digitalClock: "디지털 시계" + unixClock: "UNIX 시계" federation: "연합" instanceCloud: "인스턴스 구름" postForm: "글 입력란" diff --git a/locales/pl-PL.yml b/locales/pl-PL.yml index f0470395f..933b722c5 100644 --- a/locales/pl-PL.yml +++ b/locales/pl-PL.yml @@ -1,5 +1,5 @@ --- -_lang_: "język polski" +_lang_: "Polski" headlineMisskey: "Sieć połączona wpisami" introMisskey: "Misskey jest serwisem mikroblogowym typu open source.\nMisskey to opensource'owy serwis mikroblogowy, w którym możesz tworzyć \"notatki\", aby dzielić się tym, co się dzieje i opowiadać wszystkim o sobie.\nMożesz również użyć funkcji \"Reakcje\", aby szybko dodać własne reakcje do notatek innych użytkowników👍.\nOdkrywaj nowy świat🚀!" monthAndDay: "{month}-{day}" @@ -88,7 +88,7 @@ enterListName: "Nazwa listy" privacy: "Prywatność" makeFollowManuallyApprove: "Prośby o możliwość obserwacji wymagają zatwierdzenia" defaultNoteVisibility: "Domyślna widoczność" -follow: "Obserwowani" +follow: "Obserwuj" followRequest: "Poproś o możliwość obserwacji" followRequests: "Prośby o możliwość obserwacji" unfollow: "Przestań obserwować" @@ -127,7 +127,7 @@ unsuspendConfirm: "Czy na pewno chcesz cofnąć zawieszenie tego konta?" selectList: "Wybierz listę" selectAntenna: "Wybierz Antennę" selectWidget: "Wybierz widżet" -editWidgets: "Edytuj widżet" +editWidgets: "Edytuj widżety" editWidgetsExit: "Gotowe" customEmojis: "Niestandardowe emoji" emoji: "Emoji" @@ -142,6 +142,7 @@ flagAsBot: "To konto jest botem" flagAsBotDescription: "Jeżeli ten kanał jest kontrolowany przez jakiś program, ustaw tę opcję. Jeżeli włączona, będzie działać jako flaga informująca innych programistów, aby zapobiegać nieskończonej interakcji z różnymi botami i dostosowywać wewnętrzne systemy Misskey, traktując konto jako bota." flagAsCat: "To konto jest kotem" flagAsCatDescription: "Przełącz tę opcję, aby konto było oznaczone jako kot." +flagShowTimelineReplies: "Pokazuj odpowiedzi na osi czasu" autoAcceptFollowed: "Automatycznie przyjmuj prośby o możliwość obserwacji od użytkowników, których obserwujesz" addAccount: "Dodaj konto" loginFailed: "Nie udało się zalogować" @@ -201,6 +202,7 @@ done: "Gotowe" processing: "Przetwarzanie" preview: "Podgląd" default: "Domyślne" +defaultValueIs: "Domyślne: {value}" noCustomEmojis: "Brak emoji" noJobs: "Brak zadań" federating: "Federowanie" @@ -235,6 +237,7 @@ resetAreYouSure: "Czy na pewno chcesz zresetować?" saved: "Zapisano" messaging: "Wiadomości" upload: "Wyślij" +keepOriginalUploading: "Zachowaj oryginalny obraz" fromDrive: "Z dysku" fromUrl: "Z adresu URL" uploadFromUrl: "Wyślij z adresu URL" @@ -377,6 +380,7 @@ administrator: "Admin" token: "Token" twoStepAuthentication: "Uwierzytelnianie dwuskładnikowe" moderator: "Moderator" +moderation: "Moderacja" nUsersMentioned: "{n} wspomnianych użytkowników" securityKey: "Klucz bezpieczeństwa" securityKeyName: "Nazwa klucza" @@ -444,11 +448,13 @@ uiLanguage: "Język wyświetlania UI" groupInvited: "Zaproszony(-a) do grupy" aboutX: "O {x}" useOsNativeEmojis: "Używaj natywnych Emoji systemu" +disableDrawer: "Nie używaj menu w stylu szuflady" youHaveNoGroups: "Nie masz żadnych grup" joinOrCreateGroup: "Uzyskaj zaproszenie do dołączenia do grupy lub utwórz własną grupę." noHistory: "Brak historii" signinHistory: "Historia logowania" disableAnimatedMfm: "Wyłącz MFM z animacją" +doing: "Przetwarzanie..." category: "Kategoria" tags: "Tagi" docSource: "Źródło tego dokumentu" @@ -523,6 +529,9 @@ deleteAllFilesConfirm: "Czy na pewno chcesz usunąć wszystkie pliki?" removeAllFollowingDescription: "Przestań obserwować wszystkie konta z {host}. Wykonaj to, jeżeli instancja już nie istnieje." userSuspended: "To konto zostało zawieszone." userSilenced: "Ten użytkownik został wyciszony." +yourAccountSuspendedTitle: "To konto jest zawieszone" +yourAccountSuspendedDescription: "To konto zostało zawieszone z powodu złamania regulaminu serwera lub innych podobnych. Skontaktuj się z administratorem, jeśli chciałbyś poznać bardziej szczegółowy powód. Proszę nie zakładać nowego konta." +menu: "Menu" divider: "Rozdzielacz" addItem: "Dodaj element" relays: "Przekaźniki" @@ -541,7 +550,7 @@ disablePlayer: "Zamknij odtwarzacz wideo" expandTweet: "Rozwiń tweet" themeEditor: "Edytor motywu" description: "Opis" -describeFile: "dodaj podpis" +describeFile: "Dodaj podpis" enterFileDescription: "Wprowadź napis" author: "Autor" leaveConfirm: "Są niezapisane zmiany. Czy chcesz je odrzucić?" @@ -578,6 +587,7 @@ emptyToDisableSmtpAuth: "Pozostaw adres e-mail i hasło puste, aby wyłączyć w smtpSecureInfo: "Wyłącz, jeżeli używasz STARTTLS" testEmail: "Przetestuj dostarczanie wiadomości e-mail" wordMute: "Wyciszenie słowa" +instanceMute: "Wyciszone instancje" userSaysSomething: "{name} powiedział(-a) coś" makeActive: "Aktywuj" display: "Wyświetlanie" @@ -607,6 +617,7 @@ fillAbuseReportDescription: "Wypełnij szczegóły zgłoszenia. Jeżeli dotyczy abuseReported: "Twoje zgłoszenie zostało wysłane. Dziękujemy." reporteeOrigin: "Pochodzenie zgłoszonego" reporterOrigin: "Pochodzenie zgłaszającego" +forwardReport: "Przekaż zgłoszenie do innej instancji" send: "Wyślij" abuseMarkAsResolved: "Oznacz zgłoszenie jako rozwiązane" openInNewTab: "Otwórz w nowej karcie" @@ -619,8 +630,12 @@ random: "Losowe" system: "System" switchUi: "Przełącz interfejs użytkownika" desktop: "Pulpit" +clip: "Klip" createNew: "Utwórz nowy" optional: "Nieobowiązkowe" +createNewClip: "Utwórz nowy klip" +unclip: "Odczep" +confirmToUnclipAlreadyClippedNote: "Ten wpis jest już częścią klipu \"{name}\". Czy chcesz ją usunąć z tego klipu?" public: "Publiczny" i18nInfo: "Misskey jest tłumaczone na wiele języków przez wolontariuszy. Możesz pomóc na {link}." manageAccessTokens: "Zarządzaj tokenami dostępu" @@ -654,6 +669,7 @@ pageLikesCount: "Liczba otrzymanych polubień stron" pageLikedCount: "Liczba polubionych stron" contact: "Kontakt" useSystemFont: "Używaj domyślnej czcionki systemu" +clips: "Klipy" experimentalFeatures: "Eksperymentalne funkcje" developer: "Programista" makeExplorable: "Pokazuj konto na stronie „Eksploruj”" @@ -725,6 +741,7 @@ notRecommended: "Nie zalecane" botProtection: "Zabezpieczenie przed botami" instanceBlocking: "Zablokowane instancje" selectAccount: "Wybierz konto" +switchAccount: "Przełącz konto" enabled: "Właczono" disabled: "Wyłączono" quickAction: "Szybkie działania" @@ -756,22 +773,103 @@ global: "Globalna" squareAvatars: "Wyświetlaj kwadratowe awatary" sent: "Wyślij" received: "Otrzymane" +searchResult: "Wyniki wyszukiwania" hashtags: "Hashtag" +troubleshooting: "Rozwiązywanie problemów" +useBlurEffect: "Użyj efektów rozmycia w UI" +learnMore: "Dowiedz się więcej" +misskeyUpdated: "Misskey zostało zaktualizowane!" +whatIsNew: "Pokaż zmiany" +translate: "Przetłumacz" +translatedFrom: "Przetłumaczone z {x}" +accountDeletionInProgress: "Trwa usuwanie konta" +usernameInfo: "Nazwa, która identyfikuje Twoje konto spośród innych na tym serwerze. Możesz użyć alfabetu (a~z, A~Z), cyfr (0~9) lub podkreślników (_). Nazwy użytkownika nie mogą być później zmieniane." +aiChanMode: "Tryb Ai" +keepCw: "Zostaw ostrzeżenia o zawartości" pubSub: "Konta Pub/Sub" +resolved: "Rozwiązane" +unresolved: "Nierozwiązane" +breakFollow: "Usuń obserwującego" +itsOn: "Włączone" +itsOff: "Wyłączone" +unread: "Nieodczytane" +filter: "Filtr" +controlPanel: "Panel sterowania" +manageAccounts: "Zarządzaj kontami" +makeReactionsPublic: "Ustawić historię reakcji jako publiczną" +makeReactionsPublicDescription: "To spowoduje, że lista wszystkich Twoich dotychczasowych reakcji będzie publicznie widoczna." +classic: "Klasyczny" +muteThread: "Wycisz wątek" +unmuteThread: "Wyłącz wyciszenie wątku" +ffVisibility: "Widoczność obserwowanych/obserwujących" +ffVisibilityDescription: "Pozwala skonfigurować, kto może zobaczyć, kogo obserwujesz i kto Cię obserwuje." +continueThread: "Pokaż kontynuację wątku" +deleteAccountConfirm: "Spowoduje to nieodwracalne usunięcie Twojego konta. Kontynuować?" +incorrectPassword: "Nieprawidłowe hasło." +voteConfirm: "Potwierdzić swój głos na \"{choice}\"?" hide: "Ukryj" +leaveGroup: "Opuść grupę" +leaveGroupConfirm: "Czy na pewno chcesz opuścić \"{name}\"?" +useDrawerReactionPickerForMobile: "Wyświetlaj wybornik reakcji jako szufladę na urządzeniach mobilnych" +welcomeBackWithName: "Witaj z powrotem, {name}" +clickToFinishEmailVerification: "Kliknij [{ok}], aby zakończyć weryfikację e-mail." +overridedDeviceKind: "Typ urządzenia" +smartphone: "Smartfon" +tablet: "Tablet" +auto: "Automatycznie" +size: "Rozmiar" +numberOfColumn: "Liczba kolumn" searchByGoogle: "Szukaj" indefinitely: "Nigdy" file: "Pliki" +logoutConfirm: "Czy na pewno chcesz się wylogować?" +lastActiveDate: "Ostatnio użyte w" +statusbar: "Pasek stanu" +pleaseSelect: "Wybierz opcję" reverse: "Odwróć" colored: "Kolorowe" label: "Etykieta" +type: "Typ" +speed: "Prędkość" +localOnly: "Lokalne tylko" +failedToUpload: "Przesyłanie nie powiodło się" +cannotUploadBecauseInappropriate: "Nie można przesłać tego pliku, ponieważ jego części zostały wykryte jako potencjalnie nieodpowiednie." +cannotUploadBecauseNoFreeSpace: "Przesyłanie nie powiodło się z powodu braku miejsca na dysku." +beta: "Beta" +enableAutoSensitive: "Automatyczne oznaczanie NSFW" +enableAutoSensitiveDescription: "Umożliwia automatyczne wykrywanie i oznaczanie zawartości NSFW za pomocą uczenia maszynowego. Nawet jeśli ta opcja jest wyłączona, może być włączona w całej instancji." +navbar: "Pasek nawigacyjny" account: "Konta" +move: "Przenieś" +_sensitiveMediaDetection: + description: "Zmniejsza wysiłek związany z moderacją serwera dzięki automatycznemu rozpoznawaniu zawartości NSFW za pomocą uczenia maszynowego. To nieznacznie zwiększy obciążenie serwera." + setSensitiveFlagAutomatically: "Oznacz jako NSFW" +_emailUnavailable: + used: "Ten adres e-mail jest już używany" + format: "Format tego adresu e-mail jest nieprawidłowy" + disposable: "Nie można używać jednorazowych adresów e-mail" + mx: "Ten serwer e-mail jest nieprawidłowy" + smtp: "Ten serwer e-mail nie odpowiada" _ffVisibility: - public: "Publikuj" + public: "Publiczne" + followers: "Widoczne tylko dla obserwujących" + private: "Prywatne" +_signup: + almostThere: "Prawie na miejscu" + emailAddressInfo: "Podaj swój adres e-mail. Nie zostanie on upubliczniony." + emailSent: "E-mail z potwierdzeniem został wysłany na Twój adres e-mail ({email}). Kliknij dołączony link, aby dokończyć tworzenie konta." +_accountDelete: + accountDelete: "Usuń konto" + mayTakeTime: "Ponieważ usuwanie konta jest procesem wymagającym dużej ilości zasobów, jego ukończenie może zająć trochę czasu, w zależności od ilości utworzonej zawartości i liczby przesłanych plików." + sendEmail: "Po zakończeniu usuwania konta na adres e-mail zarejestrowany na tym koncie zostanie wysłana wiadomość e-mail." + requestAccountDelete: "Poproś o usunięcie konta" + started: "Usuwanie się rozpoczęło." + inProgress: "Usuwanie jest obecnie w toku" _ad: back: "Wróć" reduceFrequencyOfThisAd: "Pokazuj tę reklamę rzadziej" _forgotPassword: + enterEmail: "Wpisz adres e-mail użyty do rejestracji. Zostanie do niego wysłany link, za pomocą którego możesz zresetować hasło." ifNoEmail: "Jeżeli nie podano adresu e-mail podczas rejestracji, skontaktuj się z administratorem zamiast tego." contactAdmin: "Jeżeli Twoja instancja nie obsługuje adresów e-mail, skontaktuj się zamiast tego z administratorem, aby zresetować hasło." _gallery: @@ -788,6 +886,23 @@ _plugin: install: "Zainstaluj wtyczki" installWarn: "Nie instaluj niezaufanych wtyczek." manage: "Zarządzanie wtyczkami" +_preferencesBackups: + list: "Utworzone kopie zapasowe" + saveNew: "Zapisz nową kopię zapasową" + loadFile: "Załaduj z pliku" + apply: "Zastosuj do tego urządzenia" + save: "Zapisz zmiany" + inputName: "Proszę podać nazwę dla tej kopii zapasowej" + cannotSave: "Zapisanie nie powiodło się" + nameAlreadyExists: "Kopia zapasowa o nazwie \"{name}\" już istnieje. Proszę podać inną nazwę." + applyConfirm: "Czy na pewno chcesz zastosować kopię zapasową \"{name}\" na tym urządzeniu? Istniejące ustawienia tego urządzenia zostaną nadpisane." + saveConfirm: "Zapisać kopię zapasową jako {name}?" + deleteConfirm: "Usunąć kopię zapasową {name}?" + renameConfirm: "Zmienić nazwę kopii zapasowej z \"{old}\" na \"{new}\"?" + createdAt: "Utworzony w: {date} {time}" + updatedAt: "Zaktualizowano w: {date} {time}" + cannotLoad: "Ładowanie nie powiodło się" + invalidFile: "Nieprawidłowy format pliku" _registry: scope: "Zakres" key: "Klucz" @@ -822,10 +937,13 @@ _mfm: bold: "Pogrubienie" boldDescription: "Wyróżnia litery pogrubiając je." small: "Małe" + smallDescription: "Wyświetla treść jako małą i cienką." center: "Wyśrodkowanie" centerDescription: "Wyśrodkowuje zawartość." + inlineCode: "Kod (w wierszu)" blockCode: "Kod (blok)" blockCodeDescription: "Wyświetla kod z podświetlaną składnią składający się z wielu linii." + blockMath: "Matematyka (Blok)" quote: "Cytuj" quoteDescription: "Wyświetla treść jako cytat." emoji: "Niestandardowe emoji" @@ -834,6 +952,20 @@ _mfm: searchDescription: "Wyświetla pole wyszukiwania z wcześniej wpisanym tekstem." flip: "Odwróć" flipDescription: "Przerzuca treść poziomo lub pionowo." + jelly: "Animacja (Galaretka)" + jellyDescription: "Nadaje treści galaretowatą animację." + tada: "Animation (Tada)" + tadaDescription: "Nadaje treści animację podobną do \"Tada!\"." + jump: "Animacja (Skok)" + jumpDescription: "Nadaje treści animację skakania." + bounce: "Animacja (Odbijanie)" + bounceDescription: "Nadaje treści animację odbijania się." + shake: "Animacja (Wstrząsanie)" + shakeDescription: "Nadaje treści animację wstrząsania." + twitch: "Animacja (Drganie)" + twitchDescription: "Nadaje treści mocno drgającą animację." + spin: "Animacja (Obrót)" + spinDescription: "Nadaje treści animację obracania." x2: "Duże" x2Description: "Czyni treść większą." x3: "Bardzo duże" @@ -841,9 +973,17 @@ _mfm: x4: "Ogromne" x4Description: "Czyni treść jeszcze większą niż jeszcze większa." blur: "Rozmycie" + blurDescription: "Rozmywa treść. Zostanie wyraźnie wyświetlona po najechaniu." font: "Czcionka" fontDescription: "Wybiera czcionkę do wyświetlania treści." + rainbow: "Tęcza" + rainbowDescription: "Sprawia, że zawartość pojawia się w kolorach tęczy." + sparkle: "Blask" + sparkleDescription: "Nadaje zawartości efekt lśniącego brokatu." rotate: "Obróć" + rotateDescription: "Obraca zawartość o określony kąt." + plain: "Zwyczajny" + plainDescription: "Wyłącza efekty wszystkich MFM zawartych w tym efekcie MFM." _instanceTicker: none: "Nigdy nie pokazuj" remote: "Pokaż dla zdalnych użytkowników" @@ -863,6 +1003,7 @@ _channel: usersCount: "{n} uczestnicy" notesCount: "{n} wpisy" _menuDisplay: + top: "Góra" hide: "Ukryj" _wordMute: muteWords: "Słowo do wyciszenia" @@ -870,6 +1011,9 @@ _wordMute: soft: "Łagodny" hard: "Twardy" mutedNotes: "Wyciszone wpisy" +_instanceMute: + title: "Ukrywa wpisy z wymienionych instancji." + heading: "Lista instancji do wyciszenia" _theme: explore: "Przeglądaj motywy" install: "Zainstaluj motyw" @@ -950,6 +1094,7 @@ _sfx: notification: "Powiadomienia" chat: "Wiadomości" chatBg: "Rozmowy (tło)" + antenna: "Anteny" channel: "Powiadomienia kanału" _ago: future: "W przyszłości" @@ -969,12 +1114,30 @@ _time: _tutorial: title: "Jak korzystać z Misskey" step1_1: "Witaj!" + step1_2: "Ta strona nazywa się „oś czasu”. Pokazuje chronologicznie uporządkowane wpisy osób, które „śledzisz”." step1_3: "Twoja oś czasu jest jeszcze pusta, ponieważ nie opublikowałeś(-aś) jeszcze żadnych wpisów i nie obserwujesz jeszcze nikogo." step2_1: "Ukończmy konfigurację profilu zanim utworzymy wpis lub zaczniemy kogoś obserwować." + step2_2: "Podanie pewnych informacji o tym, kim jesteś, ułatwi innym określenie, czy chcą widzieć Twoje wpisy lub Cię obserwować." step3_1: "Zakończyłeś(-aś) konfigurację profilu?" + step3_2: "Następnie spróbujmy opublikować wpis. Możesz to zrobić, naciskając przycisk z ikoną ołówka na ekranie." step3_3: "Wypełnij pole i kliknij przycisk w prawym górnym rogu by wysłać post." + step3_4: "Nie masz nic do powiedzenia? Spróbuj \"ustawiam swój misskey\"!" + step4_1: "Zakończyłeś publikowanie pierwszego wpisu?" + step4_2: "Hurra! Teraz Twój pierwszy wpis powinien być wyświetlany na Twojej osi czasu." + step5_1: "Teraz spróbujmy ożywić Twoją oś czasu, przez zaobserwowanie innych ludzi." + step5_2: "{featured} pokaże Ci popularne wpisy na tej instancji. {explore} pozwoli Ci znaleźć popularnych użytkowników. Spróbuj znaleźć tam osoby, które chcesz obserwować!" + step5_3: "Aby obserwować innych użytkowników, kliknij ich ikonę i naciśnij przycisk \"Obserwuj\" na ich profilu." + step5_4: "Jeśli inny użytkownik ma ikonę kłódki obok swojej nazwy, może minąć trochę czasu, zanim ten użytkownik ręcznie zatwierdzi Twoją prośbę o obserwowanie." + step6_1: "Powinieneś teraz widzieć wpisy innych użytkowników na swojej osi czasu." + step6_2: "Możesz także umieścić „reakcje” na wpisach innych osób, aby szybko na nie odpowiedzieć." + step6_3: "Aby dodać \"reakcję\", naciśnij znak \"+\" na wpisie innego użytkownika i wybierz emotikonę, którą chcesz zareagować." + step7_1: "Gratulacje! Ukończyłeś podstawowy samouczek Misskey." + step7_2: "Jeśli chcesz dowiedzieć się więcej o Misskey, wypróbuj sekcję {help}." + step7_3: "A teraz powodzenia i baw się dobrze z Misskey! 🚀" _2fa: + alreadyRegistered: "Zarejestrowałeś już urządzenie do uwierzytelniania dwuskładnikowego." registerDevice: "Zarejestruj nowe urządzenie" + registerKey: "Zarejestruj klucz bezpieczeństwa" step1: "Najpierw, zainstaluj aplikację uwierzytelniającą (taką jak {a} lub {b}) na swoim urządzeniu." step2: "Następnie, zeskanuje kod QR z ekranu." step3: "Wprowadź token podany w aplikacji, aby ukończyć konfigurację." @@ -990,6 +1153,7 @@ _permissions: "write:favorites": "Edycja Twojej listy ulubionych." "read:following": "Wyświetlanie informacji o obserwowanych" "write:following": "Obserwowanie lub cofanie obserwacji innych kont" + "read:messaging": "Zobacz swoje czaty" "read:mutes": "Wyświetlanie listy osób, które wyciszyłeś(-aś)" "write:mutes": "Edycja listy osób, które wyciszyłeś(-aś)" "read:notifications": "Wyświetlanie powiadomień" @@ -1003,6 +1167,10 @@ _permissions: "write:page-likes": "Edycja polubień na stronach" "read:user-groups": "Wyświetlanie grup użytkownika" "write:user-groups": "Edycja lub usuwanie grup użytkownika" + "read:channels": "Zobacz swoje kanały" + "write:channels": "Edytuj swoje kanały" + "read:gallery": "Zobacz swoją galerię" + "write:gallery": "Edytuj swoją galerię" _auth: shareAccess: "Czy chcesz autoryzować „{name}” do dostępu do tego konta?" permissionAsk: "Ta aplikacja wymaga następujących uprawnień:" @@ -1021,12 +1189,21 @@ _widgets: calendar: "Kalendarz" trends: "Na czasie" clock: "Zegar" + rss: "Czytnik RSS" activity: "Aktywność" photos: "Zdjęcia" + digitalClock: "Zegar cyfrowy" + unixClock: "Zegar UNIX" federation: "Federacja" - postForm: "Utwórz wpis" + instanceCloud: "Chmura instancji" + postForm: "Formularz tworzenia wpisu" + slideshow: "Pokaz slajdów" button: "Przycisk" + onlineUsers: "Użytkownicy online" jobQueue: "Kolejka zadań" + serverMetric: "Metryka serwera" + aiscript: "Konsola AiScript" + aichan: "Ai" _cw: hide: "Ukryj" show: "Załaduj więcej" @@ -1393,9 +1570,11 @@ _notification: youReceivedFollowRequest: "Otrzymałeś(-aś) prośbę o możliwość obserwacji" yourFollowRequestAccepted: "Twoja prośba o możliwość obserwacji została przyjęta" youWereInvitedToGroup: "Zaproszony(-a) do grupy" + pollEnded: "Wyniki ankiety stały się dostępne" + emptyPushNotificationMessage: "Powiadomienia push zostały zaktualizowane" _types: all: "Wszystkie" - follow: "Obserwowani" + follow: "Nowi obserwujący" mention: "Wspomnij" reply: "Odpowiedzi" renote: "Udostępnij" @@ -1407,12 +1586,14 @@ _notification: groupInvited: "Zaproszono do grup" app: "Powiadomienia z aplikacji" _actions: + followBack: "zaobserwował cię z powrotem" reply: "Odpowiedz" renote: "Udostępnij" _deck: alwaysShowMainColumn: "Zawsze pokazuj główną kolumnę" columnAlign: "Wyrównaj kolumny" addColumn: "Dodaj kolumnę" + configureColumn: "Ustawienia kolumny" swapLeft: "Przesuń w lewo" swapRight: "Przesuń w prawo" swapUp: "Zamień z powyższym" @@ -1420,6 +1601,9 @@ _deck: stackLeft: "Przypnij do lewej" popRight: "Odepnij w prawo" profile: "Profil" + newProfile: "Nowy profil" + deleteProfile: "Usuń profil" + widgetsIntroduction: "Wybierz \"Edytuj widżety\" w menu kolumny i dodaj widżet." _columns: main: "Główna" widgets: "Widżety" diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml index 2a6988e9b..afce5ec02 100644 --- a/locales/ru-RU.yml +++ b/locales/ru-RU.yml @@ -562,6 +562,7 @@ author: "Автор" leaveConfirm: "Вы не сохранили изменения. Хотите выйти и потерять их?" manage: "Управление" plugins: "Расширения" +preferencesBackups: "Резервная копия" deck: "Пульт" undeck: "Покинуть пульт" useBlurEffectForModal: "Размывка под формой поверх всего" diff --git a/locales/th-TH.yml b/locales/th-TH.yml index 6c731ea6e..6f794a7c7 100644 --- a/locales/th-TH.yml +++ b/locales/th-TH.yml @@ -562,6 +562,7 @@ author: "ผู้เขียน" leaveConfirm: "คุณมีการเปลี่ยนแปลงที่ไม่ได้บันทึกนะ นายต้องการทิ้งการเปลี่ยนแปลงเหล่านั้นหรอ?" manage: "การจัดการ" plugins: "ปลั๊กอิน" +preferencesBackups: "ตั้งค่าการสำรองข้อมูล" deck: "เด็ค" undeck: "ออกจากเด็ค" useBlurEffectForModal: "ใช้เอฟเฟกต์เบลอสำหรับโมดอล" @@ -598,7 +599,7 @@ wordMute: "ปิดเสียงคำ" regexpError: "ข้อผิดพลาดของนิพจน์ทั่วไป" regexpErrorDescription: "เกิดข้อผิดพลาดในนิพจน์ทั่วไปในบรรทัดที่ {line} ของการปิดเสียงคำ {tab} ของคุณ:" instanceMute: "ปิดเสียง อินสแตนซ์" -userSaysSomething: "{ชื่อ} พูดอะไรบางอย่าง" +userSaysSomething: "{name} พูดอะไรบางอย่าง" makeActive: "เปิดใช้งาน" display: "แสดงผล" copy: "คัดลอก" @@ -913,13 +914,89 @@ _ffVisibility: _signup: almostThere: "เกือบจะมี" emailAddressInfo: "โปรดกรอกอีเมลของคุณ มันจะไม่เปิดเผยต่อสาธารณะ" + emailSent: "เราได้ส่งอีเมลยืนยันไปยังที่อยู่อีเมลของคุณแล้วนะ ({email}) โปรดคลิกลิงก์ที่รวมไว้เพื่อสร้างบัญชีให้เสร็จสิ้น" +_accountDelete: + accountDelete: "ลบบัญชีผู้ใช้" + mayTakeTime: "เนื่องจากการลบบัญชีนี้จะเป็นกระบวนการที่ต้องใช้ทรัพยากรมาก จึงอาจจะต้องใช้เวลาสักครู่ถึงจะเสร็จสมบูรณ์ ทั้งนี้ขึ้นอยู่กับจำนวนเนื้อหาที่คุณสร้างและจำนวนไฟล์ที่คุณอัปโหลดนะ" + sendEmail: "เมื่อการลบบัญชีนี้เสร็จสิ้น เราอาจจะส่งอีเมลไปยังที่อยู่อีเมลของคุณที่เคยลงทะเบียนไว้กับบัญชีนี้นะ" + requestAccountDelete: "ร้องขอให้ลบบัญชี" + started: "การลบได้เริ่มต้นขึ้น" + inProgress: "ปัจจุบันกำลังดำเนินการลบอยู่" _ad: back: "ย้อนกลับ" + reduceFrequencyOfThisAd: "แสดงโฆษณานี้ให้น้อยลง" +_forgotPassword: + enterEmail: "ป้อนที่อยู่อีเมลที่คุณเคยใช้ในการลงทะเบียนไว้ ลิงก์ที่คุณสามารถรีเซ็ตรหัสผ่านได้นั้นจะถูกส่งไปนะ" + ifNoEmail: "ถ้าหากคุณไม่ได้ใช้อีเมลระหว่างการลงทะเบียน กรุณาติดต่อผู้ดูแลระบบอินสแตนซ์แทนนะ" + contactAdmin: "อินสแตนซ์นี้ไม่รองรับการใช้งานที่อยู่อีเมลนี้ กรุณาติดต่อผู้ดูแลระบบอินสแตนซ์เพื่อรีเซ็ตรหัสผ่านของคุณแทน" +_gallery: + my: "แกลลอรี่ของฉัน" + liked: "โพสต์ที่ถูกใจ" + like: "ชื่นชอบ" + unlike: "ลบไลค์" _email: _follow: title: "ได้ติดตามคุณ" + _receiveFollowRequest: + title: "คุณได้รับคำขอติดตาม" +_plugin: + install: "ติดตั้งปลั๊กอิน" + installWarn: "กรุณาอย่าติดตั้งปลั๊กอินที่ไม่น่าเชื่อถือนะคะ" + manage: "จัดการปลั๊กอิน" +_preferencesBackups: + list: "สร้างการสำรองข้อมูล" + saveNew: "บันทึกใหม่" + loadFile: "โหลดจากไฟล์" + apply: "นำไปใช้กับอุปกรณ์นี้" + save: "บันทึก" + inputName: "กรุณาป้อนชื่อสำหรับข้อมูลสำรองนี้" + cannotSave: "การบันทึกล้มเหลว" + nameAlreadyExists: "มีข้อมูลสำรองชื่อ \"{name}\" นี้อยู่แล้ว กรุณาป้อนชื่ออื่นนะ" + applyConfirm: "คุณต้องการใช้ข้อมูลสำรอง \"{name}\" กับอุปกรณ์นี้อย่างงั้นจริงหรอ การตั้งค่าที่มีอยู่ของอุปกรณ์นี้จะถูกเขียนทับนะ" + saveConfirm: "บันทึกข้อมูลสำรองเป็น {name} มั้ย?" + deleteConfirm: "ลบข้อมูลสำรอง {name} มั้ย?" + renameConfirm: "เปลี่ยนชื่อข้อมูลสำรองนี้จาก \"{old}\" เป็น \"{new}\" หรือป่าว" + noBackups: "ไม่มีข้อมูลสำรองนะ คุณสามารถสำรองข้อมูลการตั้งค่าไคลเอนต์ของคุณบนเซิร์ฟเวอร์นี้โดยใช้ \"สร้างการสำรองข้อมูลใหม่\"ได้นะ" + createdAt: "สร้างเมื่อ: {date} {time}" + updatedAt: "อัปเดตเมื่อ: {date} {time}" + cannotLoad: "การโหลดล้มเหลว" + invalidFile: "รูปแบบไฟล์ไม่ถูกต้องนะ" +_registry: + scope: "สโคป" + key: "คีย์" + keys: "คีย์" + domain: "โดเมน" + createKey: "สร้างคีย์" +_aboutMisskey: + about: "Misskey เป็นซอฟต์แวร์โอเพ่นซอร์สที่ถูกพัฒนาโดย Syuilo ตั้งแต่ปี 2014" + contributors: "ผู้สนับสนุนหลัก" + allContributors: "ผู้มีส่วนร่วมทั้งหมด" + source: "ซอร์สโค้ด" + translation: "รับแปลภาษา Misskey" + donate: "บริจาคให้กับ Misskey" + morePatrons: "เราขอขอบคุณสำหรับความช่วยเหลือจากผู้ช่วยอื่นๆ ที่ไม่ได้ระบุไว้ที่นี่นะ ขอขอบคุณ! 🥰" + patrons: "สมาชิกพันธมิตร" +_nsfw: + respect: "ซ่อนสื่อ NSFW" + ignore: "อย่าซ่อนสื่อ NSFW" + force: "ซ่อนสื่อทั้งหมด" _mfm: + cheatSheet: "โค้ด MFM Cheat Sheet" + intro: "MFM เป็นภาษามาร์กอัปพิเศษเฉพาะของ Misskey ที่สามารถใช้ได้ในหลายที่ คุณยังสามารถดูรายการไวยากรณ์ MFM ที่มีอยู่ทั้งหมดได้ที่นี่นะ" + dummy: "Misskey ขยายโลกของ Fediverse" mention: "กล่าวถึง" + mentionDescription: "คุณสามารถระบุผู้ใช้โดยใช้ At-Symbol และชื่อผู้ใช้ได้นะ" + hashtag: "แฮชแท็ก" + hashtagDescription: "คุณสามารถระบุชื่อแฮชแท็กได้โดยใช้เครื่องหมายตัวเลขและข้อความได้นะ" + url: "URL" + urlDescription: "สามารถแสดง URL ได้นะ" + link: "ลิงก์" + linkDescription: "เจาะจงเฉพาะ ส่วนของข้อความที่สามารถแสดงเป็น URL ได้" + bold: "ตัวหนา" + boldDescription: "ไฮไลท์ตัวอักษรโดยทำให้หนาขึ้น" + small: "ขนาดเล็ก" + smallDescription: "แสดงผลเนื้อหาขนาดเล็กและบาง" + center: "เซ็นเตอร์" centerDescription: "แสดงผลเนื้อหาเป็นศูนย์กลาง" inlineCode: "โค้ด (อินไลน์)" inlineCodeDescription: "แสดงผลการเน้นไวยากรณ์แบบอินไลน์สำหรับโค้ด (โปรแกรม)" @@ -936,9 +1013,117 @@ _mfm: search: "ค้นหา" searchDescription: "แสดงผลกล่องค้นหาพร้อมกับข้อความที่ป้อนไว้ล่วงหน้า" flip: "พลิก" + flipDescription: "พลิกเนื้อหาในแนวนอนหรือแนวตั้ง" + jelly: "แอนิเมชั่น (เยลลี่)" + jellyDescription: "ให้เนื้อหาเป็นแอนิเมชั่นเหมือนเยลลี่" + tada: "แอนิเมชั่น (ธาดา)" + tadaDescription: "ให้เนื้อหาเป็นแอนิเมชั่นเหมือน \"ทาด้า!\"" + jump: "อนิเมชั่น (กระโดด)" + jumpDescription: "ให้เนื้อหามีภาพเคลื่อนไหวแบบกระโดด" + bounce: "อนิเมชั่น (เด้ง)" + bounceDescription: "ให้เนื้อหามีอนิเมชั่นเด้ง" + shake: "อนิเมชั่น (เขย่า)" + shakeDescription: "ให้เนื้อหามีภาพเคลื่อนไหวสั่น" + twitch: "แอนิเมชั่น (Twitch)" + twitchDescription: "ให้เนื้อหามีแอนิเมชั่นกระตุกอย่างแรง" + spin: "แอนิเมชั่น (สปิน)" + spinDescription: "ให้เนื้อหาเป็นภาพเคลื่อนไหวแบบหมุน" + x2: "ขนาดใหญ่" + x2Description: "แสดงเนื้อหาที่ใหญ่ขึ้น" + x3: "ใหญ่มาก" + x3Description: "แสดงเนื้อหาอีเว้นท์ที่ใหญ่ขึ้น" + x4: "ใหญ่อย่างไม่น่าเชื่อ" + x4Description: "แสดงผลเนื้อหาที่ใหญ่กว่าใหญ่กว่าขนาดใหญ่" + blur: "เบลอ" + blurDescription: "เบลอเนื้อหา จะแสดงผลอย่างชัดเจนต่อเมื่อวางเมาส์เหนือ" + font: "ตัวอักษร" + fontDescription: "ตั้งค่าตัวอักษรเพื่อแสดงเนื้อหาใน" + rainbow: "สายรุ้ง" + rainbowDescription: "ทำให้เนื้อหานั้นปรากฏเป็นสีรุ้ง" + sparkle: "กลิตเตอร์" + sparkleDescription: "ให้เนื้อหานั้นมีเอฟเฟกต์แบบอนุภาคประกาย" + rotate: "หมุนหน้าจอ" + rotateDescription: "เปลี่ยนเนื้อหาตามด้วยมุมที่ระบุไว้" + plain: "เรียบง่าย" + plainDescription: "ปิดการใช้งานเอฟเฟกต์ของ MFM ทั้งหมดที่มีอยู่ในเอฟเฟกต์ MFM นี้" +_instanceTicker: + none: "ไม่ต้องแสดง" + remote: "แสดงสำหรับผู้ใช้ระยะไกล" + always: "แสดงเสมอ" +_serverDisconnectedBehavior: + reload: "โหลดใหม่โดยอัตโนมัติ" + dialog: "แสดงกล่องโต้ตอบคำเตือน" + quiet: "แสดงคำเตือนที่ไม่เป็นการรบกวน" +_channel: + create: "สร้างแชนแนลใหม่" + edit: "แก้ไขแชนแนล" + setBanner: "เซตแบนเนอร์" + removeBanner: "ลบแบนเนอร์" + featured: "เทรนด์" + owned: "เจ้าของ" + following: "ติดตามแล้ว" + usersCount: "{n} ผู้เข้าร่วม" + notesCount: "{n} โน้ต" +_menuDisplay: + sideFull: "ด้านข้าง" + sideIcon: "ด้านข้าง (ไอคอน)" + top: "ท็อป" + hide: "ซ่อน" +_wordMute: + muteWords: "ปิดเสียงคำ" + muteWordsDescription: "คั่นด้วยช่องว่างสำหรับเงื่อนไข AND หรือด้วยการขึ้นบรรทัดใหม่สำหรับเงื่อนไข OR นะ" + muteWordsDescription2: "ล้อมรอบคีย์เวิร์ดด้วยเครื่องหมายทับเพื่อใช้นิพจน์ทั่วไป" + softDescription: "ซ่อนโน้ตให้ตรงตามเงื่อนไขที่ตั้งไว้จากไทม์ไลน์" + hardDescription: "ป้องกันไม่ให้โน้ตย่อที่ตรงตามเงื่อนไขที่ตั้งไว้ไม่ให้ถูกเพิ่มลงในไทม์ไลน์ นอกจากนี้ โน้ตเหล่านี้จะไม่ถูกเพิ่มลงในไทม์ไลน์แม้ว่าจะมีการเปลี่ยนแปลงเงื่อนไขยังไงก็ตาม" + soft: "ซอฟ" + hard: "ยาก" + mutedNotes: "ปิดเสียงโน้ต" +_instanceMute: + instanceMuteDescription: "การดำเนินการนี้จะปิดเสียง\"โน้ต/รีโน้ต\"จากอินสแตนซ์ที่อยู่ในรายการ รวมถึงบันทึกของผู้ใช้ที่ตอบกลับผู้ใช้จากอินสแตนซ์ที่ปิดเสียง" + instanceMuteDescription2: "คั่นด้วยการขึ้นบรรทัดใหม่" + title: "ซ่อนโน้ตจากอินสแตนซ์ที่มีอยู่ในรายการ" + heading: "รายชื่ออินสแตนซ์ที่ถูกปิดเสียง" _theme: + explore: "สำรวจธีม" + install: "ติดตั้งธีม" + manage: "จัดการธีม" + code: "โค้ดธีม" description: "รายละเอียด" + installed: "{name} ได้รับการติดตั้ง" + installedThemes: "ธีมที่ติดตั้ง" + builtinThemes: "ธีมในตัว" + alreadyInstalled: "ธีมนี้ได้รับการติดตั้งแล้ว" + invalid: "รูปแบบของธีมนี้ไม่ถูกต้องนะ" + make: "ทำธีม" + base: "ฐาน" + addConstant: "เพิ่มค่าคงที่" + constant: "ตัวแปร" + defaultValue: "ค่าเริ่มต้น" + color: "สี" + refProp: "อ้างอิงคุณสมบัติ" + refConst: "อ้างอิงค่าคงที่" + key: "คีย์" + func: "ฟังก์ชัน" + funcKind: "ประเภทฟังก์ชัน" + argument: "อากิวเม้นต์" + basedProp: "ทรัพย์สินอ้างอิง" + alpha: "ความทึบแสง" + darken: "มืดลง" + lighten: "สว่าง" + inputConstantName: "ป้อนชื่อสำหรับค่าคงที่นี้" + importInfo: "ถ้าหากต้องการป้อนโค้ดที่นี่ คุณยังสามารถนำเข้าไปยังโปรแกรมแก้ไขธีมได้" + deleteConstantConfirm: "คุณต้องการลบค่าคงที่ {const} หรือป่าว?" keys: + accent: "เน้น" + bg: "ภาพพื้นหลัง" + fg: "ข้อความ" + focus: "โฟกัส" + indicator: "ตัวบ่งชี้" + panel: "แผงควบคุม" + shadow: "เงา" + header: "ส่วนหัว" + navBg: "พื้นหลังแถบด้านข้าง" + navFg: "ข้อความแถบด้านข้าง" mention: "กล่าวถึง" renote: "รีโน้ต" divider: "ตัวแบ่ง" diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index 182cebf5a..1b6f29667 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -141,7 +141,7 @@ cacheRemoteFilesDescription: "当禁用此设定时远程文件将直接从远 flagAsBot: "这是一个机器人账号" flagAsBotDescription: "如果此帐户由程序控制,请启用此项。启用后,此标志可以帮助其他开发人员防止机器人之间产生无限互动的行为,并让Misskey的内部系统将此帐户识别为机器人。" flagAsCat: "将这个账户设定为一只猫" -flagAsCatDescription: "如果您想表明此帐户是一只猫,请打开此标志。" +flagAsCatDescription: "如果您想表明此帐户是一只猫,请打开此标志。\n开启后,会在您的头像上出现猫耳朵,并将你的帖子中的「na」替换为「nya」,日文同理。" flagShowTimelineReplies: "在时间线上显示帖子的回复" flagShowTimelineRepliesDescription: "启用时,时间线除了显示用户的帖子外,还会显示其他用户对帖子的回复。" autoAcceptFollowed: "自动允许关注者的关注" @@ -252,7 +252,7 @@ messageRead: "已读" noMoreHistory: "没有更多的历史记录" startMessaging: "添加聊天" nUsersRead: "{n}人已读" -agreeTo: "{0}勾选则表示已阅读并同意" +agreeTo: "勾选则表示已阅读并同意{0}" tos: "服务条款" start: "开始" home: "首页" @@ -668,7 +668,7 @@ yes: "是" no: "否" driveFilesCount: "网盘的文件数" driveUsage: "网盘的空间用量" -noCrawle: "要求搜索引擎不索引该站点" +noCrawle: "要求搜索引擎不索引该用户" noCrawleDescription: "要求搜索引擎不要收录(索引)您的用户页面,帖子,页面等。" lockedAccountInfo: "即使通过了关注请求,只要您不将帖子可见范围设置成“关注者”,任何人都可以看到您的帖子。" alwaysMarkSensitive: "默认将媒体文件标记为敏感内容" @@ -747,7 +747,7 @@ userInfo: "用户信息" unknown: "未知" onlineStatus: "在线状态" hideOnlineStatus: "隐藏在线状态" -hideOnlineStatusDescription: "隐藏在线状态后,可能会降低例如搜索等功能的便利性。" +hideOnlineStatusDescription: "隐藏在线状态后,可能会降低搜索等功能的便利性。" online: "在线" active: "活动" offline: "离线" diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml index c7b4fe77f..3449da99a 100644 --- a/locales/zh-TW.yml +++ b/locales/zh-TW.yml @@ -883,8 +883,8 @@ sensitiveMediaDetection: "敏感性媒體的檢測" localOnly: "僅限本地" remoteOnly: "僅限遠端" failedToUpload: "上傳失敗" -cannotUploadBecauseInappropriate: "由於判定可能包含不適當的內容,因此無法上船。" -cannotUploadBecauseNoFreeSpace: "由於雲端硬碟沒有可用空間,因此無法上船>" +cannotUploadBecauseInappropriate: "由於判定可能包含不適當的內容,因此無法上傳。" +cannotUploadBecauseNoFreeSpace: "由於雲端硬碟沒有可用空間,因此無法上傳。" beta: "Beta" enableAutoSensitive: "自動NSFW判定" enableAutoSensitiveDescription: "如果可用,請利用機器學習在媒體上自動設置 NSFW 旗標。 即使關閉此功能,依實例而定也可能會自動設置。" @@ -917,7 +917,7 @@ _signup: emailSent: "已將確認郵件發送至您輸入的電子郵件地址 ({email})。請開啟電子郵件中的連結以完成帳戶創建。" _accountDelete: accountDelete: "刪除帳戶" - mayTakeTime: "刪除帳戶的處理負荷較大,如果帳戶產生的內容數量上船的檔案數量較多的話,就需要花费一段時間才能完成。" + mayTakeTime: "刪除帳戶的處理負荷較大,如果帳戶產生的內容數量上傳的檔案數量較多的話,就需要花费一段時間才能完成。" sendEmail: "帳戶删除完成後,將向註冊地電子郵件地址發送通知。" requestAccountDelete: "刪除帳戶請求" started: "已開始刪除作業。" diff --git a/package.json b/package.json index ecf791ae3..89095852b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "misskey", -"version": "12.118.1-calc.1", + "name": "calckey", + "version": "12.119.0-calc", "codename": "aqua", "repository": { "type": "git", @@ -41,8 +41,8 @@ "dependencies": { "@bull-board/api": "^4.2.2", "@bull-board/ui": "^4.2.2", - "@tensorflow/tfjs": "^3.18.0", - "eslint": "^8.20.0", + "@tensorflow/tfjs": "^3.20.0", + "eslint": "^8.23.0", "execa": "5.1.1", "gulp": "4.0.2", "gulp-cssnano": "2.1.3", @@ -54,13 +54,15 @@ "seedrandom": "^3.0.5" }, "devDependencies": { + "@swc/core": "^1.2.248", "@types/gulp": "4.0.9", "@types/gulp-rename": "2.0.1", - "@typescript-eslint/parser": "5.33.0", + "@typescript-eslint/parser": "5.36.2", "cross-env": "7.0.3", - "cypress": "10.4.0", + "cypress": "10.7.0", "start-server-and-test": "1.14.0", - "typescript": "4.7.4", - "vue-eslint-parser": "^9.0.2" + "typescript": "4.8.3", + "unplugin-swc": "^1.3.2", + "vue-eslint-parser": "^9.0.3" } } diff --git a/packages/backend/assets/screenshots/1.webp b/packages/backend/assets/screenshots/1.webp new file mode 100644 index 000000000..83d59a6e0 --- /dev/null +++ b/packages/backend/assets/screenshots/1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e8f30c4cea205ae8c93524f08a937e33b4177f01e741b761fb99e5c0b4b5469 +size 42328 diff --git a/packages/backend/assets/screenshots/2.webp b/packages/backend/assets/screenshots/2.webp new file mode 100644 index 000000000..bc2b6ced9 --- /dev/null +++ b/packages/backend/assets/screenshots/2.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4015c8837179d2c3ed44f2cadd9da0279124df35d9d4574dbc9428cc77b72421 +size 28696 diff --git a/packages/backend/package.json b/packages/backend/package.json index 1236dfd88..7eb0ad095 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -10,11 +10,15 @@ "build": "tsc -p tsconfig.json || echo done. && tsc-alias -p tsconfig.json", "watch": "node watch.mjs", "lint": "eslint --quiet \"src/**/*.ts\"", - "mocha": "NODE_ENV=test TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT=\"./test/tsconfig.json\" mocha", - "test": "yarn mocha" + "mocha": "cross-env NODE_ENV=test TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT=\"./test/tsconfig.json\" mocha", + "test": "npm run mocha" + }, + "resolutions": { + "chokidar": "^3.3.1", + "lodash": "^4.17.21" }, "optionalDependencies": { - "@tensorflow/tfjs-node": "3.19.0" + "@tensorflow/tfjs-node": "3.20.0" }, "dependencies": { "@bull-board/koa": "4.2.2", @@ -30,10 +34,10 @@ "archiver": "5.3.1", "autobind-decorator": "2.4.0", "autwh": "0.1.0", - "aws-sdk": "2.1194.0", + "aws-sdk": "2.1213.0", "bcryptjs": "2.4.3", "blurhash": "1.1.5", - "bull": "4.8.5", + "bull": "4.9.0", "cacheable-lookup": "6.1.0", "cbor": "8.1.0", "chalk": "5.0.1", @@ -42,7 +46,7 @@ "cli-highlight": "2.1.11", "color-convert": "2.0.1", "content-disposition": "0.5.4", - "date-fns": "2.29.1", + "date-fns": "2.29.2", "deep-email-validator": "0.1.21", "escape-regexp": "0.0.1", "feed": "4.2.2", @@ -58,7 +62,7 @@ "json5": "2.2.1", "json5-loader": "4.0.1", "jsonld": "6.0.0", - "jsrsasign": "10.5.26", + "jsrsasign": "10.5.27", "koa": "2.13.4", "koa-bodyparser": "4.3.0", "koa-favicon": "2.1.0", @@ -72,15 +76,15 @@ "mime-types": "2.1.35", "misskey-js": "0.0.14", "mocha": "10.0.0", - "multer": "1.4.4", + "multer": "1.4.4-lts.1", "nested-property": "4.0.0", "node-fetch": "3.2.10", "nodemailer": "6.7.8", - "nsfwjs": "2.4.1", + "nsfwjs": "2.4.2", "oauth": "^0.9.15", "os-utils": "0.0.14", - "parse5": "7.0.0", - "pg": "8.7.3", + "parse5": "7.1.1", + "pg": "8.8.0", "private-ip": "2.3.4", "probe-image-size": "7.2.3", "promise-limit": "2.7.0", @@ -99,13 +103,13 @@ "s-age": "1.1.2", "sanitize-html": "2.7.1", "semver": "7.3.7", - "sharp": "0.30.6", + "sharp": "0.30.7", "speakeasy": "2.0.0", "strict-event-emitter-types": "2.0.0", "stringz": "2.1.0", "summaly": "2.7.0", "syslog-pro": "1.0.0", - "systeminformation": "5.12.5", + "systeminformation": "5.12.6", "tinycolor2": "1.4.2", "tmp": "0.2.1", "ts-loader": "9.3.1", @@ -113,17 +117,17 @@ "tsc-alias": "1.7.0", "tsconfig-paths": "4.1.0", "twemoji-parser": "14.0.0", - "typeorm": "0.3.7", + "typeorm": "0.3.9", "ulid": "2.3.0", "unzipper": "0.10.11", - "uuid": "8.3.2", + "uuid": "9.0.0", "web-push": "3.5.0", "websocket": "1.0.34", "ws": "8.8.1", "xev": "3.0.2" }, "devDependencies": { - "@redocly/openapi-core": "1.0.0-beta.106", + "@redocly/openapi-core": "1.0.0-beta.108", "@types/bcryptjs": "2.4.2", "@types/bull": "3.15.9", "@types/cbor": "6.0.0", @@ -145,13 +149,13 @@ "@types/koa__multer": "2.0.4", "@types/koa__router": "8.0.11", "@types/mocha": "9.1.1", - "@types/node": "18.7.2", + "@types/node": "18.7.16", "@types/node-fetch": "3.0.3", "@types/nodemailer": "6.4.5", "@types/oauth": "0.9.1", "@types/pug": "2.0.6", "@types/punycode": "2.1.0", - "@types/qrcode": "1.4.2", + "@types/qrcode": "1.5.0", "@types/random-seed": "0.3.3", "@types/ratelimiter": "3.4.3", "@types/redis": "4.0.11", @@ -167,13 +171,12 @@ "@types/web-push": "3.3.2", "@types/websocket": "1.0.5", "@types/ws": "8.5.3", - "@typescript-eslint/eslint-plugin": "5.33.0", - "@typescript-eslint/parser": "5.33.0", + "@typescript-eslint/eslint-plugin": "5.36.2", + "@typescript-eslint/parser": "5.36.2", "cross-env": "7.0.3", - "eslint": "8.21.0", + "eslint": "8.23.0", "eslint-plugin-import": "2.26.0", "execa": "6.1.0", - "form-data": "^4.0.0", - "typescript": "4.7.4" + "typescript": "4.8.3" } } diff --git a/packages/backend/src/config/types.ts b/packages/backend/src/config/types.ts index 78510c837..2f182e1ae 100644 --- a/packages/backend/src/config/types.ts +++ b/packages/backend/src/config/types.ts @@ -63,8 +63,6 @@ export type Source = { mediaProxy?: string; proxyRemoteFiles?: boolean; - - signToActivityPubGet?: boolean; }; /** diff --git a/packages/backend/src/models/entities/meta.ts b/packages/backend/src/models/entities/meta.ts index 63a4193aa..a6e4103a3 100644 --- a/packages/backend/src/models/entities/meta.ts +++ b/packages/backend/src/models/entities/meta.ts @@ -1,7 +1,7 @@ import { Entity, Column, PrimaryColumn, ManyToOne, JoinColumn } from 'typeorm'; import { id } from '../id.js'; import { User } from './user.js'; -import { Clip } from './clip.js'; +import type { Clip } from './clip.js'; @Entity() export class Meta { @@ -98,22 +98,22 @@ export class Meta { public blockedHosts: string[]; @Column('boolean', { - default: false + default: false, }) public secureMode: boolean; @Column('boolean', { - default: false + default: false, }) public privateMode: boolean; @Column('varchar', { - length: 256, array: true, default: '{}' + length: 256, array: true, default: '{}', }) public allowedHosts: string[]; @Column('varchar', { - length: 512, array: true, default: '{/featured,/channels,/explore,/pages,/about-misskey}', + length: 512, array: true, default: '{/featured,/channels,/explore,/pages,/about-calckey}', }) public pinnedPages: string[]; diff --git a/packages/backend/src/server/api/common/read-notification.ts b/packages/backend/src/server/api/common/read-notification.ts index cf993ade3..b0d38a9e3 100644 --- a/packages/backend/src/server/api/common/read-notification.ts +++ b/packages/backend/src/server/api/common/read-notification.ts @@ -1,18 +1,19 @@ +import { In } from 'typeorm'; import { publishMainStream } from '@/services/stream.js'; import { pushNotification } from '@/services/push-notification.js'; import { User } from '@/models/entities/user.js'; import { Notification } from '@/models/entities/notification.js'; import { Notifications, Users } from '@/models/index.js'; -import { In } from 'typeorm'; export async function readNotification( userId: User['id'], - notificationIds: Notification['id'][] + notificationIds: Notification['id'][], ) { if (notificationIds.length === 0) return; // Update documents const result = await Notifications.update({ + notifieeId: userId, id: In(notificationIds), isRead: false, }, { @@ -27,7 +28,7 @@ export async function readNotification( export async function readNotificationByQuery( userId: User['id'], - query: Record + query: Record, ) { const notificationIds = await Notifications.findBy({ ...query, diff --git a/packages/backend/src/server/api/endpoints/notes/children.ts b/packages/backend/src/server/api/endpoints/notes/children.ts index 7f2245c7e..72282b3de 100644 --- a/packages/backend/src/server/api/endpoints/notes/children.ts +++ b/packages/backend/src/server/api/endpoints/notes/children.ts @@ -12,8 +12,6 @@ export const meta = { requireCredential: false, requireCredentialPrivateMode: true, - description: 'Get a list of children of a notes. Children includes replies as well as quote renotes that quote the respective post. A post will not be duplicated if it is a reply and a quote of a note in this thread. For depths larger than 1 the threading has to be computed by the client.', - res: { type: 'array', optional: false, nullable: false, @@ -29,20 +27,7 @@ export const paramDef = { type: 'object', properties: { noteId: { type: 'string', format: 'misskey:id' }, - limit: { - description: 'The maximum number of replies/quotes to show per parent note, i.e. the maximum number of children each note may have.', - type: 'integer', - minimum: 1, - maximum: 100, - default: 10, - }, - depth: { - description: 'The number of layers of replies to fetch at once. Defaults to 1 for backward compatibility.', - type: 'integer', - minimum: 1, - maximum: 100, - default: 1, - }, + limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 }, sinceId: { type: 'string', format: 'misskey:id' }, untilId: { type: 'string', format: 'misskey:id' }, }, diff --git a/packages/backend/src/server/web/boot.js b/packages/backend/src/server/web/boot.js index aeb13793e..29167f8df 100644 --- a/packages/backend/src/server/web/boot.js +++ b/packages/backend/src/server/web/boot.js @@ -92,6 +92,10 @@ } } } + const colorSchema = localStorage.getItem('colorSchema'); + if (colorSchema) { + document.documentElement.style.setProperty('color-schema', colorSchema); + } //#endregion const fontSize = localStorage.getItem('fontSize'); diff --git a/packages/backend/src/server/web/index.ts b/packages/backend/src/server/web/index.ts index 0d3f012c4..c81506384 100644 --- a/packages/backend/src/server/web/index.ts +++ b/packages/backend/src/server/web/index.ts @@ -327,32 +327,24 @@ router.get('/notes/:note', async (ctx, next) => { }); if (note) { - try { - // FIXME: packing with detail may throw an error if the reply or renote is not visible (#8774) - const _note = await Notes.pack(note); - const profile = await UserProfiles.findOneByOrFail({ userId: note.userId }); - const meta = await fetchMeta(); - await ctx.render('note', { - note: _note, - profile, - avatarUrl: await Users.getAvatarUrl(await Users.findOneByOrFail({ id: note.userId })), - // TODO: Let locale changeable by instance setting - summary: getNoteSummary(_note), - instanceName: meta.name || 'Calckey', - icon: meta.iconUrl, - themeColor: meta.themeColor, - }); + const _note = await Notes.pack(note); + const profile = await UserProfiles.findOneByOrFail({ userId: note.userId }); + const meta = await fetchMeta(); + await ctx.render('note', { + note: _note, + profile, + avatarUrl: await Users.getAvatarUrl(await Users.findOneByOrFail({ id: note.userId })), + // TODO: Let locale changeable by instance setting + summary: getNoteSummary(_note), + instanceName: meta.name || 'Calckey', + icon: meta.iconUrl, + privateMode: meta.privateMode, + themeColor: meta.themeColor, + }); - ctx.set('Cache-Control', 'public, max-age=15'); + ctx.set('Cache-Control', 'public, max-age=15'); - return; - } catch (err) { - if (err.id === '9725d0ce-ba28-4dde-95a7-2cbb2c15de24') { - // note not visible to user - } else { - throw err; - } - } + return; } await next(); @@ -530,19 +522,20 @@ router.get('(.*)', async ctx => { if (meta.customMOTD.length > 0) { motd = meta.customMOTD; } - let iconUrl = meta.iconUrl; + let splashIconUrl = meta.iconUrl; if (meta.customSplashIcons.length > 0) { - iconUrl = meta.customSplashIcons[Math.floor(Math.random() * meta.customSplashIcons.length)]; + splashIconUrl = meta.customSplashIcons[Math.floor(Math.random() * meta.customSplashIcons.length)]; } await ctx.render('base', { img: meta.bannerUrl, title: meta.name || 'Calckey', instanceName: meta.name || 'Calckey', desc: meta.description, - icon: iconUrl, + icon: meta.iconUrl, + splashIcon: splashIconUrl, themeColor: meta.themeColor, - privateMode: meta.privateMode, randomMOTD: motd[Math.floor(Math.random() * motd.length)], + privateMode: meta.privateMode, }); ctx.set('Cache-Control', 'public, max-age=3'); }); diff --git a/packages/backend/src/server/web/manifest.json b/packages/backend/src/server/web/manifest.json index 4106e91fc..2f053fdc4 100644 --- a/packages/backend/src/server/web/manifest.json +++ b/packages/backend/src/server/web/manifest.json @@ -1,10 +1,12 @@ { "short_name": "Calckey", "name": "Calckey", + "description": "An open source, decentralized social media platform that's free forever!", "start_url": "/", "display": "standalone", - "background_color": "#6e6a86", + "background_color": "#1f1d2e", "theme_color": "#31748f", + "orientation": "portrait-primary", "icons": [ { "src": "/static-assets/icons/192.png", @@ -24,5 +26,32 @@ "text": "text", "url": "url" } - } + }, + "screenshots" : [ + { + "src": "/static-assets/screenshots/1.webp", + "sizes": "1195x579", + "type": "image/webp", + "platform": "narrow", + "label": "Profile page" + }, + { + "src": "/static-assets/screenshots/2.webp", + "sizes": "1195x579", + "type": "image/webp", + "platform": "narrow", + "label": "Posts" + } + ], + "shortcuts" : [ + { + "name": "Notifications", + "short_name": "Notifs", + "url": "/my/notifications" + }, + { + "name": "Chats", + "url": "/my/messaging" + } + ] } diff --git a/packages/backend/src/server/web/views/base.pug b/packages/backend/src/server/web/views/base.pug index 925bd6ba9..ed1689da7 100644 --- a/packages/backend/src/server/web/views/base.pug +++ b/packages/backend/src/server/web/views/base.pug @@ -58,7 +58,7 @@ html block og meta(property='og:title' content= title || 'Calckey') - meta(property='og:description' content= desc || '✨🌎✨ A interplanetary communication platform ✨🚀✨') + meta(property='og:description' content= desc || '✨🌎 A interplanetary communication platform 🚀✨') meta(property='og:image' content= img) style @@ -77,7 +77,7 @@ html br | Please turn on your JavaScript div#splash - img#splashIcon(src= icon || '/static-assets/splash.png') + img#splashIcon(src= splashIcon || '/static-assets/splash.png') span#splashText block randomMOTD = randomMOTD diff --git a/packages/backend/src/server/web/views/channel.pug b/packages/backend/src/server/web/views/channel.pug index fd5da0deb..c4594b766 100644 --- a/packages/backend/src/server/web/views/channel.pug +++ b/packages/backend/src/server/web/views/channel.pug @@ -1,7 +1,7 @@ extends ./base block vars - - const title = privateMode ? '非公開インスタンス' : channel.name; + - const title = privateMode ? instanceName : channel.name; - const url = `${config.url}/channels/${channel.id}`; block title diff --git a/packages/backend/src/server/web/views/clip.pug b/packages/backend/src/server/web/views/clip.pug index 5247b56af..2432470c1 100644 --- a/packages/backend/src/server/web/views/clip.pug +++ b/packages/backend/src/server/web/views/clip.pug @@ -2,7 +2,7 @@ extends ./base block vars - const user = clip.user; - - const title = privateMode ? '非公開インスタンス' : clip.name; + - const title = privateMode ? instanceName : clip.name; - const url = `${config.url}/clips/${clip.id}`; block title diff --git a/packages/backend/src/server/web/views/gallery-post.pug b/packages/backend/src/server/web/views/gallery-post.pug index 1bbe740b2..1b1c2fbfb 100644 --- a/packages/backend/src/server/web/views/gallery-post.pug +++ b/packages/backend/src/server/web/views/gallery-post.pug @@ -2,7 +2,7 @@ extends ./base block vars - const user = post.user; - - const title = privateMode ? '非公開インスタンス' : post.title; + - const title = privateMode ? instanceName : post.title; - const url = `${config.url}/gallery/${post.id}`; block title diff --git a/packages/backend/src/server/web/views/note.pug b/packages/backend/src/server/web/views/note.pug index 1e6efa375..6b55f6ba0 100644 --- a/packages/backend/src/server/web/views/note.pug +++ b/packages/backend/src/server/web/views/note.pug @@ -2,7 +2,7 @@ extends ./base block vars - const user = note.user; - - const title = privateMode ? '非公開インスタンス' : (user.name ? `${user.name} (@${user.username})` : `@${user.username}`); + - const title = privateMode ? instanceName : (user.name ? `${user.name} (@${user.username})` : `@${user.username}`); - const url = `${config.url}/notes/${note.id}`; - const isRenote = note.renote && note.text == null && note.fileIds.length == 0 && note.poll == null; diff --git a/packages/backend/src/server/web/views/page.pug b/packages/backend/src/server/web/views/page.pug index 3378562d4..109528213 100644 --- a/packages/backend/src/server/web/views/page.pug +++ b/packages/backend/src/server/web/views/page.pug @@ -2,7 +2,7 @@ extends ./base block vars - const user = page.user; - - const title = privateMode ? '非公開インスタンス' : page.title; + - const title = privateMode ? instanceName : page.title; - const url = `${config.url}/@${user.username}/${page.name}`; block title diff --git a/packages/backend/src/server/web/views/user.pug b/packages/backend/src/server/web/views/user.pug index d52a92694..cc14dedb3 100644 --- a/packages/backend/src/server/web/views/user.pug +++ b/packages/backend/src/server/web/views/user.pug @@ -1,7 +1,7 @@ extends ./base block vars - - const title = privateMode ? '非公開インスタンス' : (user.name ? `${user.name} (@${user.username})` : `@${user.username}`); + - const title = privateMode ? instanceName : (user.name ? `${user.name} (@${user.username})` : `@${user.username}`); - const url = `${config.url}/@${(user.host ? `${user.username}@${user.host}` : user.username)}`; block title diff --git a/packages/client/package.json b/packages/client/package.json index b43b3c03d..9a9b4f9bc 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -8,25 +8,25 @@ }, "dependencies": { "@discordapp/twemoji": "14.0.2", - "@fortawesome/fontawesome-free": "6.1.2", + "@fortawesome/fontawesome-free": "6.2.0", "@rollup/plugin-alias": "3.1.9", "@rollup/plugin-json": "4.1.0", "@rollup/pluginutils": "^4.2.1", "@syuilo/aiscript": "0.11.1", - "@vitejs/plugin-vue": "3.0.3", - "@vue/compiler-sfc": "3.2.37", + "@vitejs/plugin-vue": "3.1.0", + "@vue/compiler-sfc": "3.2.39", "autobind-decorator": "2.4.0", "autosize": "5.0.1", "blurhash": "1.1.5", "broadcast-channel": "4.14.0", - "browser-image-resizer": "git+https://github.com/misskey-dev/browser-image-resizer#v2.2.1-misskey.2", + "browser-image-resizer": "https://github.com/misskey-dev/browser-image-resizer", "chart.js": "3.9.1", "chartjs-adapter-date-fns": "2.0.0", - "chartjs-plugin-gradient": "0.5.0", + "chartjs-plugin-gradient": "0.5.1", "chartjs-plugin-zoom": "1.2.1", - "compare-versions": "4.1.3", - "cropperjs": "2.0.0-beta", - "date-fns": "2.29.1", + "compare-versions": "5.0.1", + "cropperjs": "2.0.0-beta.1", + "date-fns": "2.29.2", "escape-regexp": "0.0.1", "eventemitter3": "4.0.7", "idb-keyval": "6.2.0", @@ -36,36 +36,40 @@ "matter-js": "0.18.0", "mfm-js": "0.23.0", "misskey-js": "0.0.14", - "photoswipe": "5.3.0", - "prismjs": "1.28.0", + "photoswipe": "5.3.2", + "prismjs": "1.29.0", "punycode": "2.1.1", "querystring": "0.2.1", "rndstr": "1.0.0", "s-age": "1.1.2", - "sass": "1.54.4", + "sass": "1.54.9", "seedrandom": "3.0.5", "strict-event-emitter-types": "2.0.0", "stringz": "2.1.0", + "swiper": "^8.3.2", "syuilo-password-strength": "0.0.1", "tesseract.js": "^2.1.5", "textarea-caret": "3.1.0", - "three": "0.143.0", + "three": "0.144.0", "throttle-debounce": "5.0.0", "tinycolor2": "1.4.2", "tsc-alias": "1.7.0", "tsconfig-paths": "4.1.0", "twemoji-parser": "14.0.0", - "typescript": "4.7.4", - "uuid": "8.3.2", + "typescript": "4.8.3", + "uuid": "9.0.0", "vanilla-tilt": "1.7.2", - "vite": "3.0.7", - "vue": "3.2.37", + "vite": "^3.1.0", + "vue": "3.2.39", + "vue-isyourpasswordsafe": "^2.0.0", + "vue-plyr": "^7.0.0", "vue-prism-editor": "2.0.0-alpha.2", - "vuedraggable": "4.0.1" + "vue3-lottie": "^2.3.0", + "vuedraggable": "4.1.0" }, "devDependencies": { "@types/escape-regexp": "0.0.1", - "@types/glob": "7.2.0", + "@types/glob": "8.0.0", "@types/gulp": "4.0.9", "@types/gulp-rename": "2.0.1", "@types/katex": "0.14.0", @@ -75,14 +79,14 @@ "@types/throttle-debounce": "5.0.0", "@types/tinycolor2": "1.4.3", "@types/uuid": "8.3.4", - "@typescript-eslint/eslint-plugin": "5.33.0", - "@typescript-eslint/parser": "5.33.0", + "@typescript-eslint/eslint-plugin": "5.36.2", + "@typescript-eslint/parser": "5.36.2", "cross-env": "7.0.3", - "cypress": "10.4.0", - "eslint": "8.21.0", + "cypress": "10.7.0", + "eslint": "8.23.0", "eslint-plugin-import": "2.26.0", - "eslint-plugin-vue": "9.3.0", - "rollup": "2.77.3", + "eslint-plugin-vue": "9.4.0", + "rollup": "2.79.0", "start-server-and-test": "1.14.0" } } diff --git a/packages/client/src/account.ts b/packages/client/src/account.ts index 243aea68c..10257b841 100644 --- a/packages/client/src/account.ts +++ b/packages/client/src/account.ts @@ -146,7 +146,7 @@ export async function openAccountMenu(opts: { onChoose?: (account: misskey.entities.UserDetailed) => void; }, ev: MouseEvent) { function showSigninDialog() { - popup(defineAsyncComponent(() => import('@/components/signin-dialog.vue')), {}, { + popup(defineAsyncComponent(() => import('@/components/MkSigninDialog.vue')), {}, { done: res => { addAccount(res.id, res.i); success(); @@ -155,7 +155,7 @@ export async function openAccountMenu(opts: { } function createAccount() { - popup(defineAsyncComponent(() => import('@/components/signup-dialog.vue')), {}, { + popup(defineAsyncComponent(() => import('@/components/MkSignupDialog.vue')), {}, { done: res => { addAccount(res.id, res.i); switchAccountWithToken(res.i); diff --git a/packages/client/src/components/abuse-report.vue b/packages/client/src/components/MkAbuseReport.vue similarity index 96% rename from packages/client/src/components/abuse-report.vue rename to packages/client/src/components/MkAbuseReport.vue index 8c25df110..9a3464b64 100644 --- a/packages/client/src/components/abuse-report.vue +++ b/packages/client/src/components/MkAbuseReport.vue @@ -36,9 +36,9 @@ diff --git a/packages/client/src/components/ripple.vue b/packages/client/src/components/MkRipple.vue similarity index 52% rename from packages/client/src/components/ripple.vue rename to packages/client/src/components/MkRipple.vue index 401e78e30..9d93211d5 100644 --- a/packages/client/src/components/ripple.vue +++ b/packages/client/src/components/MkRipple.vue @@ -1,8 +1,9 @@ - diff --git a/packages/client/src/components/sample.vue b/packages/client/src/components/MkSample.vue similarity index 98% rename from packages/client/src/components/sample.vue rename to packages/client/src/components/MkSample.vue index 48c7fe844..68510809c 100644 --- a/packages/client/src/components/sample.vue +++ b/packages/client/src/components/MkSample.vue @@ -29,7 +29,7 @@ diff --git a/packages/client/src/components/signin-dialog.vue b/packages/client/src/components/MkSigninDialog.vue similarity index 87% rename from packages/client/src/components/signin-dialog.vue rename to packages/client/src/components/MkSigninDialog.vue index ec68668a7..fd2724451 100644 --- a/packages/client/src/components/signin-dialog.vue +++ b/packages/client/src/components/MkSigninDialog.vue @@ -14,8 +14,8 @@ diff --git a/packages/client/src/components/ui/super-menu.vue b/packages/client/src/components/MkSuperMenu.vue similarity index 100% rename from packages/client/src/components/ui/super-menu.vue rename to packages/client/src/components/MkSuperMenu.vue diff --git a/packages/client/src/components/tab.vue b/packages/client/src/components/MkTab.vue similarity index 100% rename from packages/client/src/components/tab.vue rename to packages/client/src/components/MkTab.vue diff --git a/packages/client/src/components/tag-cloud.vue b/packages/client/src/components/MkTagCloud.vue similarity index 100% rename from packages/client/src/components/tag-cloud.vue rename to packages/client/src/components/MkTagCloud.vue diff --git a/packages/client/src/components/timeline.vue b/packages/client/src/components/MkTimeline.vue similarity index 93% rename from packages/client/src/components/timeline.vue rename to packages/client/src/components/MkTimeline.vue index 0b279c153..47d2edd8c 100644 --- a/packages/client/src/components/timeline.vue +++ b/packages/client/src/components/MkTimeline.vue @@ -4,7 +4,7 @@ diff --git a/packages/client/src/components/ui/tooltip.vue b/packages/client/src/components/MkTooltip.vue similarity index 100% rename from packages/client/src/components/ui/tooltip.vue rename to packages/client/src/components/MkTooltip.vue diff --git a/packages/client/src/components/updated.vue b/packages/client/src/components/MkUpdated.vue similarity index 88% rename from packages/client/src/components/updated.vue rename to packages/client/src/components/MkUpdated.vue index 0dd440640..2c08a02cc 100644 --- a/packages/client/src/components/updated.vue +++ b/packages/client/src/components/MkUpdated.vue @@ -11,9 +11,9 @@ + + diff --git a/packages/client/src/components/user-card-mini.vue b/packages/client/src/components/MkUserCardMini.vue similarity index 97% rename from packages/client/src/components/user-card-mini.vue rename to packages/client/src/components/MkUserCardMini.vue index 732adf7f5..1a4c49498 100644 --- a/packages/client/src/components/user-card-mini.vue +++ b/packages/client/src/components/MkUserCardMini.vue @@ -11,7 +11,7 @@ diff --git a/packages/client/src/components/user-select-dialog.vue b/packages/client/src/components/MkUserSelectDialog.vue similarity index 98% rename from packages/client/src/components/user-select-dialog.vue rename to packages/client/src/components/MkUserSelectDialog.vue index 4d8e427a7..07caedfe3 100644 --- a/packages/client/src/components/user-select-dialog.vue +++ b/packages/client/src/components/MkUserSelectDialog.vue @@ -56,7 +56,7 @@ import { nextTick, onMounted } from 'vue'; import * as misskey from 'misskey-js'; import MkInput from '@/components/form/input.vue'; import FormSplit from '@/components/form/split.vue'; -import XModalWindow from '@/components/ui/modal-window.vue'; +import XModalWindow from '@/components/MkModalWindow.vue'; import * as os from '@/os'; import { defaultStore } from '@/store'; import { i18n } from '@/i18n'; diff --git a/packages/client/src/components/users-tooltip.vue b/packages/client/src/components/MkUsersTooltip.vue similarity index 95% rename from packages/client/src/components/users-tooltip.vue rename to packages/client/src/components/MkUsersTooltip.vue index 2df19bcd3..4ccc44b47 100644 --- a/packages/client/src/components/users-tooltip.vue +++ b/packages/client/src/components/MkUsersTooltip.vue @@ -12,7 +12,7 @@ diff --git a/packages/client/src/components/global/avatar.vue b/packages/client/src/components/global/MkAvatar.vue similarity index 98% rename from packages/client/src/components/global/avatar.vue rename to packages/client/src/components/global/MkAvatar.vue index 4868896c9..5f3e3c176 100644 --- a/packages/client/src/components/global/avatar.vue +++ b/packages/client/src/components/global/MkAvatar.vue @@ -15,7 +15,7 @@ import * as misskey from 'misskey-js'; import { getStaticImageUrl } from '@/scripts/get-static-image-url'; import { extractAvgColorFromBlurhash } from '@/scripts/extract-avg-color-from-blurhash'; import { acct, userPage } from '@/filters/user'; -import MkUserOnlineIndicator from '@/components/user-online-indicator.vue'; +import MkUserOnlineIndicator from '@/components/MkUserOnlineIndicator.vue'; import { defaultStore } from '@/store'; const props = withDefaults(defineProps<{ diff --git a/packages/client/src/components/global/ellipsis.vue b/packages/client/src/components/global/MkEllipsis.vue similarity index 100% rename from packages/client/src/components/global/ellipsis.vue rename to packages/client/src/components/global/MkEllipsis.vue diff --git a/packages/client/src/components/global/emoji.vue b/packages/client/src/components/global/MkEmoji.vue similarity index 100% rename from packages/client/src/components/global/emoji.vue rename to packages/client/src/components/global/MkEmoji.vue diff --git a/packages/client/src/components/global/error.vue b/packages/client/src/components/global/MkError.vue similarity index 93% rename from packages/client/src/components/global/error.vue rename to packages/client/src/components/global/MkError.vue index 256288cb4..91e736b38 100644 --- a/packages/client/src/components/global/error.vue +++ b/packages/client/src/components/global/MkError.vue @@ -9,7 +9,7 @@ diff --git a/packages/client/src/components/global/loading.vue b/packages/client/src/components/global/MkLoading.vue similarity index 100% rename from packages/client/src/components/global/loading.vue rename to packages/client/src/components/global/MkLoading.vue diff --git a/packages/client/src/components/global/misskey-flavored-markdown.vue b/packages/client/src/components/global/MkMisskeyFlavoredMarkdown.vue similarity index 100% rename from packages/client/src/components/global/misskey-flavored-markdown.vue rename to packages/client/src/components/global/MkMisskeyFlavoredMarkdown.vue diff --git a/packages/client/src/components/global/page-header.vue b/packages/client/src/components/global/MkPageHeader.vue similarity index 93% rename from packages/client/src/components/global/page-header.vue rename to packages/client/src/components/global/MkPageHeader.vue index c5aff22db..6ca0972b0 100644 --- a/packages/client/src/components/global/page-header.vue +++ b/packages/client/src/components/global/MkPageHeader.vue @@ -1,29 +1,25 @@