diff --git a/.gitignore b/.gitignore index 3c55ec0d..0a1a09c9 100644 --- a/.gitignore +++ b/.gitignore @@ -57,9 +57,6 @@ packages/backend/assets/LICENSE !/packages/backend/src/db !/packages/backend/src/server/api/endpoints/drive/files -packages/megalodon/lib -packages/megalodon/.idea - # blender backups *.blend1 *.blend2 diff --git a/Dockerfile b/Dockerfile index c7d9a95d..7ba32ba8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,7 +26,6 @@ COPY packages/backend/package.json packages/backend/package.json COPY packages/client/package.json packages/client/package.json COPY packages/sw/package.json packages/sw/package.json COPY packages/firefish-js/package.json packages/firefish-js/package.json -COPY packages/megalodon/package.json packages/megalodon/package.json COPY packages/backend/native-utils/package.json packages/backend/native-utils/package.json COPY packages/backend/native-utils/npm/linux-x64-musl/package.json packages/backend/native-utils/npm/linux-x64-musl/package.json COPY packages/backend/native-utils/npm/linux-arm64-musl/package.json packages/backend/native-utils/npm/linux-arm64-musl/package.json @@ -56,8 +55,6 @@ RUN apt-get update && apt-get install -y libvips-dev zip unzip tini ffmpeg COPY . ./ -COPY --from=build /firefish/packages/megalodon /firefish/packages/megalodon - # Copy node modules COPY --from=build /firefish/node_modules /firefish/node_modules COPY --from=build /firefish/packages/backend/node_modules /firefish/packages/backend/node_modules diff --git a/locales/ca-ES.yml b/locales/ca-ES.yml index 4c964873..e04c7a66 100644 --- a/locales/ca-ES.yml +++ b/locales/ca-ES.yml @@ -1441,7 +1441,8 @@ _accountDelete: requestAccountDelete: Sol·licitar la supressió del compte _ad: back: Enrera - reduceFrequencyOfThisAd: Mostrar aquest anunci menys + reduceFrequencyOfThisAd: Mostrar menys aquest anunci + adsBy: Anunci comunitari per {by} _gallery: my: La meva Galeria liked: Publicacions que m'han agradat @@ -1539,8 +1540,8 @@ low: Baixa emailNotConfiguredWarning: L'adreça de correu electrònic no està definida. instanceSecurity: Seguretat del servidor privateMode: Mode Privat -allowedInstances: Servidors a la llista blanca -allowedInstancesDescription: Llista blanca de Hosts amb qui federar, cadascún separat +allowedInstances: Servidors permesos +allowedInstancesDescription: Llista permesa de Hosts amb qui federar, cadascún separat per una línia nova (només s'aplica en mode privat). previewNoteText: Mostra la vista prèvia customCss: CSS personalitzat @@ -1552,7 +1553,7 @@ troubleshooting: Resolució de problemes learnMore: Més informació misskeyUpdated: Firefish s'ha actualitzat! translate: Tradueix -translatedFrom: Traduït per {x} +translatedFrom: Traduït desde {x} aiChanMode: Ai-chan a la interfície d'usuari clàssica keepCw: Mantenir els avisos de contingut pubSub: Comptes Pub/Sub @@ -1646,8 +1647,8 @@ customCssWarn: Aquesta configuració només s'ha d'utilitzar si sabeu què fa. L squareAvatars: Mostra avatars quadrats secureModeInfo: Quan es faci una solicitut d'altres servidors no contestar sense una prova. -privateModeInfo: Quan està activat, només els servidors a la llista blanca es poden - federar amb el vostre servidor. Totes les publicacions s'amagaran al públic. +privateModeInfo: Quan està activat, només els servidors a la llista es poden federar + amb el vostre servidor. Totes les publicacions s'amagaran al públic. useBlurEffect: Utilitzeu efectes de desenfocament a la interfície d'usuari accountDeletionInProgress: La supressió del compte està en curs unmuteThread: Desfés el silenci al fil @@ -2200,3 +2201,4 @@ languageForTranslation: Idioma de traducció d'articles openServerInfo: Mostra la informació del servidor fent clic al símbol del servidor en un missatge vibrate: Activar vibracions +clickToShowPatterns: Fes clic per veure patrons de mòduls diff --git a/locales/en-US.yml b/locales/en-US.yml index a5574f2b..6292c969 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -83,7 +83,8 @@ exportRequested: "You've requested an export. This may take a while. It will be to your Drive once completed." importRequested: "You've requested an import. This may take a while." lists: "Lists" -listsDesc: "Lists let you create timelines with specified users. They can be accessed from the timelines page." +listsDesc: "Lists let you create timelines with specified users. They can be accessed + from the timelines page." noLists: "You don't have any lists" note: "Post" notes: "Posts" @@ -408,7 +409,8 @@ avoidMultiCaptchaConfirm: "Using multiple Captcha systems may cause interference them. Would you like to disable the other Captcha systems currently active? If you would like them to stay enabled, press cancel." antennas: "Antennas" -antennasDesc: "Antennas display new posts matching the criteria you set!\n They can be accessed from the timelines page." +antennasDesc: "Antennas display new posts matching the criteria you set!\n They can + be accessed from the timelines page." manageAntennas: "Manage Antennas" name: "Name" antennaSource: "Antenna source" @@ -603,7 +605,8 @@ output: "Output" script: "Script" disablePagesScript: "Disable AiScript on Pages" expandOnNoteClick: "Open post on click" -expandOnNoteClickDesc: "If disabled, you can still open posts in the right-click menu or by clicking the timestamp." +expandOnNoteClickDesc: "If disabled, you can still open posts in the right-click menu + or by clicking the timestamp." updateRemoteUser: "Update remote user information" deleteAllFiles: "Delete all files" deleteAllFilesConfirm: "Are you sure that you want to delete all files?" @@ -743,8 +746,8 @@ unclip: "Unclip" confirmToUnclipAlreadyClippedNote: "This post is already part of the \"{name}\" clip. Do you want to remove it from this clip instead?" public: "Public" -i18nInfo: "Firefish is being translated into various languages by volunteers. You can - help at {link}." +i18nInfo: "Firefish is being translated into various languages by volunteers. You + can help at {link}." manageAccessTokens: "Manage access tokens" accountInfo: "Account Info" notesCount: "Number of posts" @@ -779,7 +782,8 @@ pageLikedCount: "Number of received Page likes" contact: "Contact" useSystemFont: "Use the system's default font" clips: "Clips" -clipsDesc: "Clips are like share-able categorized bookmarks. You can create clips from the menu of individual posts." +clipsDesc: "Clips are like share-able categorized bookmarks. You can create clips + from the menu of individual posts." experimentalFeatures: "Experimental features" developer: "Developer" makeExplorable: "Make account visible in \"Explore\"" @@ -888,10 +892,10 @@ secureMode: "Secure Mode (Authorized Fetch)" instanceSecurity: "Server Security" secureModeInfo: "When requesting from other servers, do not send back without proof." privateMode: "Private Mode" -privateModeInfo: "When enabled, only whitelisted servers can federate with your server. +privateModeInfo: "When enabled, only allowlisted servers can federate with your server. All posts will be hidden from the public." -allowedInstances: "Whitelisted Servers" -allowedInstancesDescription: "Hosts of servers to be whitelisted for federation, each +allowedInstances: "Allowlisted Servers" +allowedInstancesDescription: "Hosts of servers to be allowlisted for federation, each separated by a new line (only applies in private mode)." previewNoteText: "Show preview" customCss: "Custom CSS" @@ -1083,8 +1087,8 @@ license: "License" indexPosts: "Index Posts" indexFrom: "Index from Post ID onwards" indexFromDescription: "Leave blank to index every post" -indexNotice: "Now indexing. This will probably take a while, please don't restart\ - \ your server for at least an hour." +indexNotice: "Now indexing. This will probably take a while, please don't restart + your server for at least an hour." customKaTeXMacro: "Custom KaTeX macros" customKaTeXMacroDescription: "Set up macros to write mathematical expressions easily! The notation conforms to the LaTeX command definitions and is written as \\newcommand{\\ @@ -1139,10 +1143,12 @@ origin: "Origin" delete2fa: "Disable 2FA" deletePasskeys: "Delete passkeys" delete2faConfirm: "This will irreversibly delete 2FA on this account. Proceed?" -deletePasskeysConfirm: "This will irreversibly delete all passkeys and security keys on this account. Proceed?" +deletePasskeysConfirm: "This will irreversibly delete all passkeys and security keys + on this account. Proceed?" inputNotMatch: "Input does not match" -addRe: "Add \"re:\" at the beginning of comment in reply to a post with a content warning" showBigPostButton: "Show a bigger post button in the posting form" +addRe: "Add \"re:\" at the beginning of comment in reply to a post with a content + warning" confirm: "Confirm" emphasizeFollowed: "Highlight the \"Follows you\" sign on your follower info" importZip: "Import ZIP" @@ -1151,7 +1157,8 @@ emojiPackCreator: "Emoji pack creator" indexable: "Indexable" indexableDescription: "Allow built-in search to show your public posts" languageForTranslation: "Post translation language" -detectPostLanguage: "Automatically detect the language and show a translate button for posts in foreign languages" +detectPostLanguage: "Automatically detect the language and show a translate button + for posts in foreign languages" vibrate: "Play vibrations" openServerInfo: "Show server information by clicking the server ticker on a post" @@ -1195,7 +1202,8 @@ _accountDelete: inProgress: "Deletion is currently in progress" _ad: back: "Back" - reduceFrequencyOfThisAd: "Show this ad less" + adsBy: "Community banner by {by}" + reduceFrequencyOfThisAd: "Show this banner less" _forgotPassword: enterEmail: "Enter the email address you used to register. A link with which you can reset your password will then be sent to it." @@ -1245,8 +1253,8 @@ _registry: domain: "Domain" createKey: "Create key" _aboutFirefish: - about: "Firefish is a fork of Misskey made by ThatOneCalculator, which has been in - development since 2022." + about: "Firefish is a fork of Misskey made by ThatOneCalculator, which has been + in development since 2022." contributors: "Main contributors" allContributors: "All contributors" misskeyContributors: "Misskey main contributors" @@ -1255,13 +1263,15 @@ _aboutFirefish: donate: "Donate to Firefish" donateTitle: "Enjoying Firefish?" pleaseDonateToFirefish: "Please consider donating to Firefish to support its development." - pleaseDonateToHost: "Please also consider donating to your home server, {host}, to help support its operation costs." + pleaseDonateToHost: "Please also consider donating to your home server, {host}, + to help support its operation costs." donateHost: "Donate to {host}" morePatrons: "We also appreciate the support of many other helpers not listed here. Thank you! 🥰" sponsors: "Firefish sponsors" patrons: "Firefish patrons" - patronsList: "Listed chronologically, not by donation size. Donate with the link above to get your name on here!" + patronsList: "Listed chronologically, not by donation size. Donate with the link + above to get your name on here!" _nsfw: respect: "Hide NSFW media" ignore: "Don't hide NSFW media" @@ -1276,7 +1286,8 @@ _mfm: can be used in many places. Here you can view a list of all available MFM syntax." dummy: "Firefish expands the world of the Fediverse" advanced: "Advanced MFM" - advancedDescription: "If disabled, only allows for basic markup unless animated MFM is playing" + advancedDescription: "If disabled, only allows for basic markup unless animated + MFM is playing" mention: "Mention" mentionDescription: "You can specify a user by using an At-Symbol and a username." hashtag: "Hashtag" @@ -1532,10 +1543,10 @@ _tutorial: step5_4: "The Local {icon} timeline is where you can see posts from everyone else on this server." step5_5: "The Social {icon} timeline is a combination of the Home and Local timelines." - step5_6: "The Recommended {icon} timeline is where you can see posts from servers\ - \ the admins recommend." - step5_7: "The Global {icon} timeline is where you can see posts from every other\ - \ connected server." + step5_6: "The Recommended {icon} timeline is where you can see posts from servers + the admins recommend." + step5_7: "The Global {icon} timeline is where you can see posts from every other + connected server." step6_1: "So, what is this place?" step6_2: "Well, you didn't just join Firefish. You joined a portal to the Fediverse, an interconnected network of thousands of servers." @@ -1548,23 +1559,29 @@ _2fa: registerTOTP: "Register authenticator app" step1: "First, install an authentication app (such as {a} or {b}) on your device." step2: "Then, scan the QR code displayed on this screen." - step2Click: "Clicking on this QR code will allow you to register 2FA to your security key or phone authenticator app." + step2Click: "Clicking on this QR code will allow you to register 2FA to your security + key or phone authenticator app." step2Url: "You can also enter this URL if you're using a desktop program:" step3Title: "Enter an authentication code" step3: "Enter the token provided by your app to finish setup." step4: "From now on, any future login attempts will ask for such a login token." securityKeyNotSupported: "Your browser does not support security keys." - registerTOTPBeforeKey: "Please set up an authenticator app to register a security or pass key." - securityKeyInfo: "Besides fingerprint or PIN authentication, you can also setup authentication via hardware security keys that support FIDO2 to further secure your account." + registerTOTPBeforeKey: "Please set up an authenticator app to register a security + or pass key." + securityKeyInfo: "Besides fingerprint or PIN authentication, you can also setup + authentication via hardware security keys that support FIDO2 to further secure + your account." chromePasskeyNotSupported: "Chrome passkeys are currently not supported." registerSecurityKey: "Register a security or pass key" securityKeyName: "Enter a key name" tapSecurityKey: "Please follow your browser to register the security or pass key" removeKey: "Remove security key" removeKeyConfirm: "Really delete the {name} key?" - whyTOTPOnlyRenew: "The authenticator app cannot be removed as long as a security key is registered." + whyTOTPOnlyRenew: "The authenticator app cannot be removed as long as a security + key is registered." renewTOTP: "Reconfigure authenticator app" - renewTOTPConfirm: "This will cause verification codes from your previous app to stop working" + renewTOTPConfirm: "This will cause verification codes from your previous app to + stop working" renewTOTPOk: "Reconfigure" renewTOTPCancel: "Cancel" token: "2FA Token" @@ -1713,10 +1730,9 @@ _profile: youCanIncludeHashtags: "You can also include hashtags in your bio." metadata: "Additional Information" metadataEdit: "Edit additional Information" - metadataDescription: - "Using these, you can display additional information fields - in your profile. You can add an {a} tag or {l} tag with {rel} - to verify the link on your profile!" + metadataDescription: "Using these, you can display additional information fields + in your profile. You can add an {a} tag or {l} tag with {rel} to verify the link + on your profile!" metadataLabel: "Label" metadataContent: "Content" changeAvatar: "Change avatar" @@ -2127,9 +2143,9 @@ _deck: _experiments: title: "Experiments" enablePostImports: "Enable post imports" - postImportsCaption: "Allows users to import their posts from past Firefish,\ - \ Misskey, Mastodon, Akkoma, and Pleroma accounts. It may cause slowdowns during\ - \ load if your queue is bottlenecked." + postImportsCaption: "Allows users to import their posts from past Firefish, Misskey, + Mastodon, Akkoma, and Pleroma accounts. It may cause slowdowns during load if + your queue is bottlenecked." _dialog: charactersExceeded: "Max characters exceeded! Current: {current}/Limit: {max}" charactersBelow: "Not enough characters! Current: {current}/Limit: {min}" diff --git a/locales/es-ES.yml b/locales/es-ES.yml index 045f2d61..9c8c83a2 100644 --- a/locales/es-ES.yml +++ b/locales/es-ES.yml @@ -1988,7 +1988,7 @@ migration: Migración silenced: Silenciado deleted: Eliminado edited: 'Editado a las {date} {time}' -editNote: Editar nota +editNote: Editar publicación silenceThisInstance: Silenciar este servidor findOtherInstance: Buscar otro servidor userSaysSomethingReasonRenote: '{name} impulsó una publicación que contiene {reason]' @@ -2164,3 +2164,4 @@ noGraze: Por favor desactiva la extensión de navegador "Graze for Mastodon" ya silencedWarning: Esta página se muestra debido a que estos usuarios son de servidores que tu administrador ha silenciado, ya que son presumiblemente fuente de spam. isBot: Esta cuenta es un bot +clickToShowPatterns: Haz clic para mostrar patrones de módulos diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index 7ea66d7e..d7cdd0da 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -646,7 +646,7 @@ emptyToDisableSmtpAuth: "Laisser le nom d’utilisateur et le mot de passe vides smtpSecure: "Utiliser SSL/TLS implicitement dans les connexions SMTP" smtpSecureInfo: "Désactiver cette option lorsque STARTTLS est utilisé" testEmail: "Tester la distribution de courriel" -wordMute: "Filtre de mots" +wordMute: "Filtre de mots et langages" regexpError: "Erreur d’expression régulière" instanceMute: "Serveur masqué" userSaysSomething: "{name} a dit quelque chose" @@ -960,7 +960,8 @@ _accountDelete: inProgress: "Suppression en cours" _ad: back: "Retour" - reduceFrequencyOfThisAd: "Voir cette publicité moins souvent" + reduceFrequencyOfThisAd: "Voir cette bannière moins souvent" + adsBy: Bannière communautaire par {by} _forgotPassword: enterEmail: "Entrez ici l'adresse e-mail que vous avez enregistrée pour votre compte. Un lien vous permettant de réinitialiser votre mot de passe sera envoyé à cette @@ -1145,6 +1146,13 @@ _wordMute: soft: "Doux" hard: "Strict" mutedNotes: "Publications masquées" + muteLangsDescription2: Utiliser les code de langage (i.e en, fr, ja, zh). + lang: Langage + langDescription: Cacher du fil de publication les publications qui correspondent + à ces langues. + muteLangs: Langages filtrés + muteLangsDescription: Séparer avec des espaces or des retours à la ligne pour une + condition OU (OR). _instanceMute: instanceMuteDescription2: "Séparer avec des sauts de lignes" title: "Masque les publications provenant des serveurs listés." @@ -2218,3 +2226,5 @@ openServerInfo: Afficher les informations du serveur en cliquant sur le bandeau serveur d’une publication indexable: Indexable languageForTranslation: Langage post-traduction +vibrate: Jouer les vibrations +clickToShowPatterns: Cliquer pour montrer les patrons de modules diff --git a/locales/hi.yml b/locales/hi.yml new file mode 100644 index 00000000..4ac34398 --- /dev/null +++ b/locales/hi.yml @@ -0,0 +1 @@ +_lang_: "हिन्दी" diff --git a/locales/id-ID.yml b/locales/id-ID.yml index da599a8f..2a995c23 100644 --- a/locales/id-ID.yml +++ b/locales/id-ID.yml @@ -953,7 +953,8 @@ _accountDelete: inProgress: "Penghapusan sedang dalam proses" _ad: back: "Kembali" - reduceFrequencyOfThisAd: "Tampilkan iklan ini lebih sedikit" + reduceFrequencyOfThisAd: "Tampilkan banner ini lebih sedikit" + adsBy: Banner komunitas oleh {by} _forgotPassword: enterEmail: "Masukkan alamat surel yang kamu gunakan pada saat mendaftar. Sebuah tautan untuk mengatur ulang kata sandi kamu akan dikirimkan ke alamat surel tersebut." @@ -1268,8 +1269,8 @@ _tutorial: {introduction} atau \"Halo dunia!\" yang sederhana." step5_1: "Linimasa, linimasa di mana-mana!" step5_2: "Servermu memiliki {timelines} lini masa berbeda yang diaktifkan." - step5_3: "Lini masa Beranda {icon} adalah tempat di mana kamu bisa melihat postingan - dari akun yang kamu ikuti." + step5_3: "Lini masa Beranda {icon} adalah tempat kamu bisa melihat postingan dari + akun yang kamu ikuti." step5_4: "Linimasa Lokal {icon} adalah tempat kamu dapat melihat postingan dari siapa pun di server ini." step6_1: "Jadi, tempat apa ini?" @@ -1923,9 +1924,9 @@ moderation: Moderasi userSaysSomethingReason: '{name} mengatakan {reason}' secureMode: Mode Aman (Pengambilan Terotorisasi) secureModeInfo: Saat meminta dari server lain, jangan kirim kembali tanpa bukti. -privateModeInfo: Saat aktif, hanya server yang masuk daftar putih dapat terfederasi - dengan servermu. Semua postingan akan disembunyikan dari publik. -allowedInstances: Server Masuk Daftar Putih +privateModeInfo: Saat aktif, hanya server yang masuk daftar yang diizinkan yang dapat + terfederasi dengan servermu. Semua postingan akan disembunyikan dari publik. +allowedInstances: Daftar Server Diizinkan newer: lebih baru userSaysSomethingReasonReply: '{name} membalas postingan berisi {reason}' userSaysSomethingReasonRenote: '{name} memposting ulang postingan berisi {reason}' @@ -1935,8 +1936,8 @@ jumpToPrevious: Lompat ke sebelumnya flagSpeakAsCatDescription: Postinganmu akan nyampak dalam mode kucing cw: Peringatan konten flagSpeakAsCat: Bicara sebagai kucing -allowedInstancesDescription: Host server akan masuk daftar putih untuk federasi, mereka - dipisahkan dengan baris baru (hanya diterapkan pada mode pribadi). +allowedInstancesDescription: Server host akan masuk daftar yang diizinkan untuk federasi, + mereka dipisahkan dengan baris baru (hanya diterapkan pada mode pribadi). xl: XL privateMode: Mode Pribadi seperateRenoteQuote: Tombol posting ulang dan kutip terpisah @@ -2182,3 +2183,4 @@ languageForTranslation: Bahasa terjemahan kiriman openServerInfo: Tampilkan informasi server dengan mengeklik ticker server di sebuah kiriman vibrate: Putar getaran +clickToShowPatterns: Klik untuk menampilkan pola modul diff --git a/locales/it-IT.yml b/locales/it-IT.yml index 9ecb4ac3..360f1556 100644 --- a/locales/it-IT.yml +++ b/locales/it-IT.yml @@ -626,7 +626,7 @@ emptyToDisableSmtpAuth: "Lasciare username e password vuoti per disabilitare la smtpSecure: "Usa la porta SSL/TLS predefinita per le connessioni SMTP" smtpSecureInfo: "Disabilita quando è attivo STARTTLS" testEmail: "Test di consegna email" -wordMute: "Filtro parole" +wordMute: "Filtro parole e lingua" instanceMute: "Server silenziati" userSaysSomething: "{name} ha detto qualcosa" makeActive: "Attiva" @@ -901,7 +901,8 @@ _accountDelete: caricato. _ad: back: "Indietro" - reduceFrequencyOfThisAd: "Mostra meno spesso questa pubblicità" + reduceFrequencyOfThisAd: "Mostra meno spesso questo banner" + adsBy: Banner della comunità da {by} _forgotPassword: enterEmail: "Inserisci l'e-mail che hai registrato nel tuo profilo. Il link di ripristino della password verrà inviato a questo indirizzo." @@ -1084,6 +1085,11 @@ _wordMute: soft: "Moderato" hard: "Severo" mutedNotes: "Post silenziati" + muteLangsDescription2: 'Usa il codice lingua, esempio: en, fr, ja, zh.' + lang: Lingua + langDescription: Nascondi dalla timeline i post in quest'insieme di lingue. + muteLangs: Lingue da non mostrare + muteLangsDescription: Separa andando a capo o con spazi per la condizione OR. _theme: explore: "Esplora temi" install: "Installa un tema" @@ -1992,11 +1998,11 @@ secureMode: Modalità sicura (Acquisizione autorizzata) secureModeInfo: Le richieste dai server remoti non ricevono risposta senza prima una verifica. privateMode: Modalità privata -allowedInstancesDescription: Gli host dei server che saranno federati in esclusiva, +allowedInstancesDescription: Gli host dei server con cui sarà permessa la federazione, uno per riga (funziona solo in modalità privata). -privateModeInfo: Se abilitata, solo i server in una whitelist potranno essere federati +privateModeInfo: Se abilitata, solo i server nell'elenco potranno essere federati con questo server. Tutti i post saranno nascosti al pubblico. -allowedInstances: Whitelist dei server +allowedInstances: Elenco server permessi customCssWarn: Questa impostazione dovrebbe essere usata solo se sai cosa stai facendo. Inserire valori errati potrebbe bloccare il funzionamento del client. lastCommunication: Ultima comunicazione @@ -2164,3 +2170,5 @@ indexable: Indicizzabile languageForTranslation: Linguaggio di traduzione dei post openServerInfo: Mostra informazioni sul server cliccando sul riquadro del server in un post +vibrate: Abilita la vibrazione +clickToShowPatterns: Clicca per vedere i pattern del modulo diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index be47333d..3ccb28e9 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -833,7 +833,7 @@ translatedFrom: "{x}から翻訳" accountDeletionInProgress: "アカウントの削除が進行中です" usernameInfo: "サーバー上であなたのアカウントを一意に識別するための名前です。アルファベット(a~z, A~Z)、数字(0~9)、およびアンダーバー(_)が使用できます。ユーザー名は後から変更できません。" aiChanMode: "藍モード(クラシックUI)" -enterSendsMessage: "メッセージングでReturnキーを押すと、メッセージが送信されます(デフォルトはCtrl + Returnです)" +enterSendsMessage: "チャットでEnterキー(Returnキー)を押すと、メッセージが送信されます(オフの場合はCtrl + Enterで送信します)" keepCw: "CWを維持する" pubSub: "Pub/Subのアカウント" lastCommunication: "直近の通信" @@ -1031,7 +1031,8 @@ _accountDelete: inProgress: "削除が進行中" _ad: back: "戻る" - reduceFrequencyOfThisAd: "この広告の表示頻度を下げる" + adsBy: "バナーで{by}" + reduceFrequencyOfThisAd: "このバナーの表示頻度を下げる" _forgotPassword: enterEmail: "アカウントに登録したメールアドレスを入力してください。そのアドレス宛てに、パスワードリセット用のリンクが送信されます。" ifNoEmail: "メールアドレスを登録していない場合は、管理者までお問い合わせください。" @@ -1513,7 +1514,7 @@ _profile: youCanIncludeHashtags: "ハッシュタグを含められます。" metadata: "追加情報" metadataEdit: "追加情報を編集" - metadataDescription: "プロフィールに表として追加情報を表示できます。{a}タグまたは{l}タグを{rel}とともに追加すると、プロフィールのリンクを確認できます。" + metadataDescription: "プロフィールに追加情報を表示できます。{a}タグまたは{l}タグを{rel}とともに追加すると、プロフィールのリンクを本人認証できます。" metadataLabel: "ラベル" metadataContent: "内容" changeAvatar: "アバター画像を変更" @@ -2011,3 +2012,4 @@ hideMyName: "自分の名前とIDを表示しない" openServerInfo: "投稿内のサーバー名をクリックでサーバー情報を開く" searchEngine: "検索の MFM で使用する検索エンジン" postSearch: "このサーバーの投稿検索" +indexableDescription: MastodonやFirefishなどの検索機能に、あなたの投稿が表示されるのを許可します。 diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml index 8d052d61..7db8a4f4 100644 --- a/locales/ja-KS.yml +++ b/locales/ja-KS.yml @@ -64,7 +64,7 @@ import: "インポート" export: "エクスポート" files: "ファイル" download: "ダウンロード" -driveFileDeleteConfirm: "ファイル「{name}」を消してしもうてええか?このファイルを添付した投稿も消えてまうで。" +driveFileDeleteConfirm: "ファイル「{name}」を消してええんか?添付した全部の投稿から、きれいさっぱり消えてなくなるで。" unfollowConfirm: "{name}のフォローを解除してもええんか?" exportRequested: "エクスポートしてな、ってリクエストしたけど、これ多分めっちゃ時間かかるで。エクスポート終わったら「ドライブ」に突っ込んどくで。" importRequested: "インポートしてな、ってリクエストしたけど、これ多分めっちゃ時間かかるで。" @@ -86,7 +86,7 @@ serverIsDead: "サーバーの応答がおまへん。ちーとの間待って youShouldUpgradeClient: "このページを表示するには、リロードして新しいバージョンのクライアントを使うてや。" enterListName: "リスト名を入れてや" privacy: "プライバシー" -makeFollowManuallyApprove: "自分が認めた人だけがこのアカウントをフォローできるようにする" +makeFollowManuallyApprove: "ワイが認めた奴だけがワイをフォローできるようにする" defaultNoteVisibility: "もとからの公開範囲" follow: "フォロー" followRequest: "フォローを頼む" @@ -138,9 +138,9 @@ addEmoji: "絵文字を追加" settingGuide: "ええ感じの設定" cacheRemoteFiles: "リモートのファイルをキャッシュする" cacheRemoteFilesDescription: "この設定を切っとくと、リモートファイルをキャッシュせず直リンクするようになるで。サーバーの容量は節約できるけど、サムネイルが作られんくなるから通信量が増えるで。" -flagAsBot: "ワイはBotや 🤖" +flagAsBot: "ワイはBotや🤖" flagAsBotDescription: "もしこのアカウントがプログラムによって運用されるんやったら、このフラグをオンにしてたのむで。オンにすると、反応の連鎖を防ぐためのフラグとして他の開発者に役立ったり、Firefishのシステム上での扱いがBotに合ったもんになったりするんやで。" -flagAsCat: "ワイはCatや 🐯" +flagAsCat: "ワイはCatや🐯" flagAsCatDescription: "自分、猫ちゃんならこのフラグつけてみ?" flagShowTimelineReplies: "タイムラインに返信を表示させたる" flagShowTimelineRepliesDescription: "有効にすると、タイムラインに他のユーザー宛ての投稿も表示したるで。" @@ -246,8 +246,8 @@ uploadFromUrl: "URLアップロード" uploadFromUrlDescription: "このURLのファイルをアップロードしたいねん" uploadFromUrlRequested: "アップロードしたい言うといたで" uploadFromUrlMayTakeTime: "アップロード終わるんにちょい時間かかるかもしれへんわ。" -explore: "みつける" -messageRead: "もう読んだ" +explore: "みっける" +messageRead: "もう読まはった" noMoreHistory: "これより過去の履歴はあらへんで" startMessaging: "チャットやるで" nUsersRead: "{n}人が読んでもうた" @@ -334,7 +334,7 @@ bannerUrl: "バナー画像のURL" backgroundImageUrl: "背景画像のURL" basicInfo: "基本情報" pinnedUsers: "ピン留めしたユーザー" -pinnedUsersDescription: "「みつける」ページとかにピン留めしたいユーザーをここに書けばええんやで。他ん人との名前は改行で区切ればええんやで。" +pinnedUsersDescription: "「みっける」ページとかにピン留めしときたい兄ちゃんらをここに書いといたらええわ。名前は改行で区切ればええで。" pinnedPages: "ピン留めページ" pinnedPagesDescription: "サーバーのいっちゃん上にピン留めしたいページのパスを、改行で区切って記述してな。" pinnedClipId: "ピン留めするクリップのID" @@ -363,7 +363,7 @@ caseSensitive: "大文字と小文字は別もんや" withReplies: "返信も入れたって" connectedTo: "次のアカウントに繋がっとるで" notesAndReplies: "投稿と返信" -withFiles: "ファイル付いとる" +withFiles: "ファイル付いとるやつ" silence: "サイレンス" silenceConfirm: "サイレンスしよか?" unsilence: "サイレンスやめるで" @@ -389,7 +389,7 @@ securityKeyName: "キーの名前" registerSecurityKey: "セキュリティキーを登録するで" lastUsed: "最後につこうた日" unregister: "登録やめる" -passwordLessLogin: "パスワード無くてもログインできるようにする" +passwordLessLogin: "パスワードなんか無うてもログインでけるようにする" resetPassword: "パスワードをリセット" newPasswordIs: "今度のパスワードは「{password}」や" reduceUiAnimation: "UIの動きやアニメーションを減らす" @@ -398,8 +398,8 @@ notFound: "見つからへんね" notFoundDescription: "指定されたURLに該当するページはあらへんやった。" uploadFolder: "とりあえずアップロードしたやつ置いとく所" cacheClear: "キャッシュをほかす" -markAsReadAllNotifications: "通知はもう全て読んだわっ" -markAsReadAllUnreadNotes: "投稿は全て読んだわっ" +markAsReadAllNotifications: "通知はもうぜんぶ読んだわっ" +markAsReadAllUnreadNotes: "投稿はぜんぶ読んだわっ" markAsReadAllTalkMessages: "チャットはもうぜんぶ読んだわっ" help: "ヘルプ" inputMessageHere: "ここにメッセージ書いてや" @@ -507,8 +507,8 @@ listen: "聴く" none: "なし" showInPage: "ページで表示" popout: "ポップアウト" -volume: "音量" -masterVolume: "全体の音量" +volume: "やかましさ" +masterVolume: "全体的なやかましさ" details: "もっと" chooseEmoji: "絵文字を選ぶ" unableToProcess: "なんか作業が止まってしまったようやね" @@ -527,7 +527,7 @@ scratchpad: "スクラッチパッド" scratchpadDescription: "スクラッチパッドではAiScriptを色々試すことができるんや。Firefishに対して色々できるコードを書いて動かしてみたり、結果を見たりできるで。" output: "出力" script: "スクリプト" -disablePagesScript: "Pagesのスクリプトを無効にしてや" +disablePagesScript: "ページ機能のスクリプトを無効にしてや" updateRemoteUser: "リモートユーザー情報の更新してくれん?" deleteAllFiles: "すべてのファイルを削除" deleteAllFilesConfirm: "ホンマにすべてのファイルを削除するん?消したもんはもう戻ってこんのやで?" @@ -684,7 +684,7 @@ clips: "クリップ" experimentalFeatures: "実験的機能やで" developer: "開発者やで" makeExplorable: "アカウントを見つけやすくするで" -makeExplorableDescription: "オフにすると、「みつける」にアカウントが載らんくなるで。" +makeExplorableDescription: "オフにすると、「みっける」ページに名前が載らんくなるで。" showGapBetweenNotesInTimeline: "タイムライン上の投稿を離して表示するで" duplicate: "複製" left: "左" @@ -714,7 +714,7 @@ saveConfirm: "保存するで?" deleteConfirm: "ホンマに削除するで?" invalidValue: "有効な値じゃないみたいやで。" registry: "レジストリ" -closeAccount: "アカウントを閉鎖する" +closeAccount: "このアカウントにさいならする" currentVersion: "現在のバージョン" latestVersion: "最新のバージョン" youAreRunningUpToDateClient: "今使ってるクライアントが最新やで!" @@ -872,8 +872,8 @@ _registry: domain: "ドメイン" createKey: "キーを作る" _aboutFirefish: - about: "Firefishは、ThatOneCalculatorが2022年にMisskeyをいじって作った、オープンなソースのソフトウェアや。" - contributors: "主な貢献者" + about: "Firefishは、ThatOneCalculatorが2022年にMisskeyをいじって作った、オープンなソースのソフトウエアーや。" + contributors: "ごっつい貢献者" allContributors: "全ての貢献者" source: "ソースコード" translation: "Firefishを翻訳" @@ -1082,8 +1082,9 @@ _visibility: public: 公開 homeDescription: ローカルTLやグローバルTLには流さへん _profile: - name: "名前" + name: "お名前" username: "ユーザー名" + youCanIncludeHashtags: ハッシュタグを書いてもええよ。 _exportOrImport: allNotes: "すべての投稿" followingList: "フォロー" @@ -1441,6 +1442,12 @@ _tutorial: step1_2: 使い始める前に、いくつか設定を済ませまひょ。すぐできますえ。 step2_1: 最初に、あんさんのプロフィールを作りまひょ step2_2: プロフィールを設定しはることで、他ん人があんさんの投稿を見たり、フォローしたりするときの助けになってます。 + step3_2: "あんさんのホームとソーシャルタイムラインは、どなたはんをフォローしはるかで決まります。ほな、いくつかアカウントをフォローしてみまひょ。\n\ + プロフィールの右上にある、まあるい+ボタンをクリックしはるとフォローできますえ。" + step4_1: 投稿しとーみ + step5_1: タイムライン! 文字と写真の宝石箱や~ + step5_2: うちのサーバーでは{timelines}種類のタイムラインをご用意しとります。 + step4_2: 最初は{introduction}に投稿したり、シンプルに「ここは賑やかどすなぁ。うちはそこまで喋れまへんが、どうぞよろしゅうに」などと投稿しはる方もいてます。 _postForm: _placeholders: b: なんかおましたか? @@ -1449,7 +1456,7 @@ _postForm: d: なんや言いたいんちゃいますか? f: あんさん書くんを待っとるんどす... a: いまなにしとん? -flagSpeakAsCat: 猫弁で話す +flagSpeakAsCat: 猫弁で喋る flagSpeakAsCatDescription: オンにすると、ワレの投稿の「な」を「にゃ」に変換したるで。 welcomeBackWithName: おおきに、{name}はん migration: アカウントの引っ越し diff --git a/locales/nl-NL.yml b/locales/nl-NL.yml index 394947e0..8e195c73 100644 --- a/locales/nl-NL.yml +++ b/locales/nl-NL.yml @@ -36,11 +36,11 @@ save: "Opslaan" users: "Gebruikers" addUser: "Toevoegen gebruiker" favorite: "Favorieten" -favorites: "Toevoegen aan favorieten" +favorites: "Favorieten" unfavorite: "Verwijderen uit favorieten" favorited: "Toegevoegd aan favorieten." alreadyFavorited: "Al toegevoegd aan favorieten" -cantFavorite: "Kon niet toevoegen aan favorieten" +cantFavorite: "Kon niet toevoegen aan favorieten." pin: "Vastmaken aan profielpagina" unpin: "Losmaken van profielpagina" copyContent: "Kopiëren inhoud" @@ -302,7 +302,7 @@ nsfw: "NSFW" whenServerDisconnected: "Wanneer de verbinding met de server wordt onderbroken" disconnectedFromServer: "Verbinding met de server onderbroken." inMb: "in megabytes" -pinnedNotes: "Vastgemaakte notitie" +pinnedNotes: "Vastgemaakte posts" userList: "Lijsten" aboutFirefish: "Over Firefish" administrator: "Beheerder" @@ -412,7 +412,7 @@ emoji: Emoji selectList: Selecteer een lijst selectAntenna: Selecteer een antenne deleted: Verwijderd -editNote: Bewerk notitie +editNote: Bewerk post edited: 'Bewerkt om {date} {time}' emojis: Emojis emojiName: Emoji naam @@ -682,3 +682,27 @@ serverLogs: Server logboek deleteAll: Verwijder alles showFixedPostForm: Toon het post formulier bovenaan de tijdlijn newNoteRecived: Er zijn nieuwe posts +pinnedUsersDescription: Lijst gebruikersnamen gescheiden door regeleinden om vast + te pinnen in het tabblad "Verkennen". +silencedInstancesDescription: Geef de hostnames op van de servers die je het zwijgen + wilt opleggen. Accounts op de vermelde servers worden als "Stil" behandeld, kunnen + alleen volgverzoeken doen en kunnen geen lokale accounts vermelden als ze niet worden + gevolgd. Dit heeft geen invloed op de geblokkeerde servers. +searchPlaceholder: Doorzoek Firefish +pinnedPagesDescription: Voer de paden in van de pagina's die je aan de bovenste pagina + van deze server wilt vastmaken, gescheiden door regeleinden. +_permissions: + "read:favorites": Lijst van uw favorieten + "write:favorites": Beheer uw favorieten +clipsDesc: Paperclips zijn deelbare gebundelde favorieten. Je kunt paperclips maken + vanuit het menu van individuele posts. +selectChannel: Selecteer een kanaal +removeReaction: Uw reactie verwijderen +antennasDesc: "Antennes geven nieuwe berichten weer die voldoen aan de criteria die + je hebt ingesteld!\nZe zijn toegankelijk via de pagina Tijdlijnen." +pinnedClipId: ID van de paperclip om vast te pinnen +hiddenTagsDescription: 'Vermeld de hashtags (zonder #) van de hashtags die je wilt + verbergen voor trending en verkennen. Verborgen hashtags zijn nog steeds op andere + manieren te ontdekken.' +listsDesc: Met lijsten kun je tijdlijnen aanmaken met gespecificeerde gebruikers. + Ze zijn toegankelijk via de pagina Tijdlijnen. diff --git a/locales/tr-TR.yml b/locales/tr-TR.yml index 709156fc..6b18bc35 100644 --- a/locales/tr-TR.yml +++ b/locales/tr-TR.yml @@ -16,10 +16,10 @@ noNotifications: "Bildirim bulunmuyor" settings: "Ayarlar" basicSettings: "Temel Ayarlar" otherSettings: "Diğer Ayarlar" -openInWindow: "Bir pencere ile aç" +openInWindow: "Açılır pencerede aç" profile: "Profil" -timeline: "Zaman çizelgesi" -noAccountDescription: "Bu kullanıcı henüz kendi hakkında kısmını yazmadı." +timeline: "Akış" +noAccountDescription: "Bu kullanıcı henüz \"hakkında\" kısmını yazmadı." login: "Giriş Yap" logout: "Çıkış Yap" signup: "Kayıt Ol" @@ -29,7 +29,7 @@ addUser: "Kullanıcı Ekle" favorite: "Favorilere ekle" favorites: "Favoriler" unfavorite: "Favorilerden Kaldır" -favorited: "Favorilerime eklendi." +favorited: "Favorilere eklendi." alreadyFavorited: "Zaten favorilerinizde kayıtlı." pin: "Sabitlenmiş" unpin: "Sabitlemeyi kaldır" @@ -41,9 +41,9 @@ deleteAndEditConfirm: "Bu gönderiyi silip yeniden düzenlemek istiyor musunuz? ilişkin tüm tepkiler, destekler ve yanıtlar silinecektir." addToList: "Listeye ekle" sendMessage: "Mesaj Gönder" -copyUsername: "Kullanıcı Adını Kopyala" +copyUsername: "Kullanıcı Adını kopyala" searchUser: "Kullanıcıları ara" -pinned: "Sabitlenmiş" +pinned: "Profile sabitle" remove: "Sil" smtpUser: "Kullanıcı Adı" smtpPass: "Şifre" @@ -240,7 +240,7 @@ instance: Sunucu fetchingAsApObject: Fediverse'den çekiliyor removeReaction: Tepkini sil rememberNoteVisibility: Gönderi görünürlüğü ayarlarını hatırla -attachCancel: Eklentiyi kaldır +attachCancel: Ek'i kaldır suspend: Askıya Al unsuspend: Askıya Almayı Kaldır unmute: Susturmayı Kaldır @@ -248,13 +248,13 @@ blockConfirm: Bu hesabı engellemek istediğinize emin misiniz? unblockConfirm: Bu hesabın engelini kaldırmak istediğinize emin misiniz? settingGuide: Tavsiye edilen ayarlar cacheRemoteFilesDescription: Bu ayar devre dışı bırakıldığında, uzak dosyalar doğrudan - uzak sunucudan yüklenir. Bunun devre dışı bırakılması depolama kullanımını azaltacak, - ancak küçük resimler oluşturulmayacağından trafiği artıracaktır. + dosyanın bulunduğu sunucudan yüklenir. Bunun devre dışı bırakılması depolama kullanımını + azaltacak, ancak küçük resimler oluşturulmayacağından trafiği artıracaktır. flagAsCatDescription: Kedi kulaklarına sahip olacak ve bir kedi gibi konuşacaksın! flagSpeakAsCat: Kedi gibi konuş setWallpaper: Arkaplanı ayarla removeWallpaper: Arkaplanı sil -operations: Operasyonlar +operations: İşlemler clearCachedFiles: Ön belleği temizle clearCachedFilesConfirm: Önbelleğe alınan tüm uzak dosyaları silmek istediğinizden emin misiniz? @@ -357,13 +357,13 @@ whatIsNew: Değişiklikleri göster translate: Çevir breakFollow: Takipçiyi sil breakFollowConfirm: Takipçiyi kaldırmak istediğinizden emin misiniz? -unfollowConfirm: "{name}'i takibi bırakmak istediğinizden emin misiniz?" +unfollowConfirm: "{name} kullanıcısını takip etmeyi bırakmak istediğinizden emin misiniz?" importRequested: Bir içe aktarma isteğinde bulundunuz. Bu biraz zaman alabilir. somethingHappened: Bir hata ile karşılaşıldı retry: Tekrar Dene youShouldUpgradeClient: Bu sayfayı görüntülemek için, lütfen istemcinizi yenileyin. reactionSetting: Tepki seçicide gösterilecek tepkiler -unmarkAsSensitive: NSFW işaretini kaldır +unmarkAsSensitive: NSFW (Müstehcen İçerik) işaretini kaldır enterFileName: Dosya adı gir noJobs: Hiçbir iş yok instanceFollowing: Sunucuda takip ediliyor @@ -481,8 +481,8 @@ mention: Bahset download: İndir lists: Listeler noLists: Hiç listen yok -cantRenote: Bu gönderi yükseltilemez. -cantReRenote: Bir yükseltme tekrar yükseltilemez. +cantRenote: Bu gönderi desteklenemez. +cantReRenote: Bir destek tekrardan desteklenemez. mute: Sustur block: Engelle editWidgetsExit: Tamamlandı @@ -636,10 +636,10 @@ reactionSettingDescription2: Yeniden sıralamak için sürükleyin, silmek için eklemek için "+"ya basın. you: Sen clickToShow: Görmek için tıkla -sensitive: NSFW +sensitive: NSFW (Müstehcen İçerik) add: Ekle reaction: Tepkiler -markAsSensitive: NSFW olarak işaretle +markAsSensitive: NSFW (Müstehcen İçerik) olarak işaretle unblock: Engeli Kaldır addAccount: Hesap ekle network: İnternet @@ -722,11 +722,11 @@ moveAccountDescription: Bu süreç geri döndürülemez. Taşımadan önce yeni şeklinde biçimlendirilmiş hesabın etiketini girin emojis: Emoji flagAsCat: Kedi misin? 😺 -selectChannel: Kanal seç +selectChannel: Bir kanal seç emojiName: Emoji adı showOnRemote: Orijinal sayfayı aç flagSpeakAsCatDescription: Gönderileriniz kedi modundayken miyavdirilecektir -flagShowTimelineReplies: Yanıtları zaman çizelgesinde göster +flagShowTimelineReplies: Yanıtları akışta göster silenceThisInstance: Bu sunucuyu sustur proxyAccountDescription: Vekil hesabı, belirli koşullar altında kullanıcılar için uzaktan takipçi işlevi gören bir hesaptır. Örneğin, bir kullanıcı listeye bir uzak @@ -845,8 +845,8 @@ pageLoadErrorDescription: Bu problem genelde ağ hataları veya tarayıcının kaynaklanır. Önbelleği temizlemeyi deneyin ve biraz bekledikten sonra tekrar deneyin. quote: Alıntıla pinnedNote: Sabitlenmiş gönderi -renote: Yükselt -unrenote: Yükseltmeyi geri al +renote: Destekle +unrenote: Desteklemeyi geri al emojiUrl: Emoji URL'si suspendConfirm: Bu hesabı askıya almak istediğinize emin misiniz? addEmoji: Ekle @@ -858,7 +858,7 @@ wallpaper: Arkaplan searchWith: 'Arat: {q}' youHaveNoLists: Hiçbir listen yok followConfirm: '{name} kullanıcısını takip etmek istediğine emin misin?' -metadata: Metadata +metadata: Üstveri monitor: Monitör jobQueue: İş Sırası noUsers: Kullanıcılar bulunamadı @@ -1013,7 +1013,7 @@ incorrectPassword: Yanlış şifre. voteConfirm: '"{choice}" için oyunuzu onaylıyor musunuz?' failedToFetchAccountInformation: Hesap bilgileri getirilemedi rateLimitExceeded: Hız limiti aşıldı -renotedBy: '{user} Yükseltti' +renotedBy: '{user} destekledi' host: Host objectStorage: Nesne Depolaması objectStorageUseSSLDesc: API bağlantıları için HTTPS kullanmayacaksanız bunu kapatın @@ -1026,8 +1026,8 @@ verificationEmailSent: Bir doğrulama maili gönderildi. Doğrulamayı tamamlama lütfen verilen bağlantıyı takip edin. hashtags: Etiketler resolved: Çözüldü -flagShowTimelineRepliesDescription: Açıksa, kullanıcıların zaman çizelgesindeki diğer - kullanıcıların gönderilerine verdiği yanıtları gösterir. +flagShowTimelineRepliesDescription: Açıksa, kullanıcıların akıştaki diğer kullanıcıların + gönderilerine verdiği yanıtları gösterir. clearQueueConfirmText: Kuyrukta kalan teslim edilmemiş gönderiler birleştirilmeyecektir. Genellikle bu işleme gerek yoktur. image: Resim @@ -1040,8 +1040,8 @@ unsuspendConfirm: Bu hesabın askıya almasını kaldırmak istediğinize emin m selectList: Liste seç editWidgets: Widget'ları düzenle showEmojisInReactionNotifications: Tepki bildirimlerinde emojileri göster -renoteMute: Yükseltmeleri sustur -renoteUnmute: Yükseltmeleri susturmayı kaldır +renoteMute: Desteklemeleri sustur +renoteUnmute: Desteklemelerde ki susturmayı kaldır loginFailed: Giriş yapılamadı proxyAccount: Vekil Hesap selectUser: Kullanıcı seç @@ -1068,7 +1068,7 @@ hideThisNote: Bu gönderiyi gizle file: Dosya enableEmojiReactions: Emoji tepkilerini aç cw: İçerik uyarısı -makeFollowManuallyApprove: Onay gerektiren takip istekleri +makeFollowManuallyApprove: Onayınızı gerektiren takip istekleri today: Bugün enableRecommendedTimeline: Tavsiye edilen zaman çizgisini aktive et state: Durum @@ -1165,7 +1165,7 @@ indexFromDescription: Her gönderiyi dizine eklemek için boş bırakın indexNotice: Şimdi indeksleniyor. Bu muhtemelen biraz zaman alacaktır, lütfen sunucunuzu en az bir saat yeniden başlatmayın. customKaTeXMacro: Özel KaTeX makroları -directNotes: Direkt Mesajlar +directNotes: Özel Mesajlar import: İçeri Aktar export: Dışarı Aktar mentions: Bahsetmeler @@ -1173,8 +1173,8 @@ files: Dosyalar driveFileDeleteConfirm: '"{name}" dosyasını silmek istediğinizden emin misiniz? Dosyayı "Ek" olarak içeren tüm gönderilerden kaldırılacaktır.' createList: Liste oluştur -listsDesc: Listeler, belirtilen kullanıcılarla zaman çizelgesi oluşturmanıza olanak - tanır. Zaman Çizelgesi sayfasından erişilebilirler. +listsDesc: Listeler, belirtilen kullanıcıların içeriklerini içeren akışlar oluşturmanıza + olanak tanır. Akış sayfasından erişilebilirler. note: Gönder enterListName: Liste için isim gir unfollow: Takipten Çık @@ -1183,14 +1183,14 @@ followRequestPending: Takip isteği bekleniyor enterEmoji: Bir emoji gir followRequest: Takip İsteği followRequests: Takip istekleri -renoted: Yükseldi. +renoted: Desteklendi. emoji: Emoji cacheRemoteFiles: Uzak dosyaları önbelleğe al flagAsBot: Bu hesabı robot olarak işaretle flagAsBotDescription: Bu hesap bir program tarafından kontrol ediliyorsa bu seçeneği etkinleştirin. Etkinleştirilirse, diğer geliştiricilerin botlarıyla sonsuz etkileşim zincirlerinin önlemesi ve Firefish'in dahili sistemlerinin bu hesabı bir bot olarak - ele alacak şekilde ayarlaması için bir bayrak görevi görür. + ele alacak şekilde ayarlaması için bir işaret görevi görür. clearQueue: Sırayı Temizle hiddenTags: Gizlenmiş Etiketler done: Tamamlandı @@ -2156,3 +2156,4 @@ importZip: ZIP içe aktar indexable: Endekslenebilir languageForTranslation: Çeviri sonrası dili confirm: Onayla +clickToShowPatterns: Modülün örüntülerini göstermek için tıklayın diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index fe761239..df820de3 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -12,7 +12,7 @@ ok: "好" gotIt: "知道了!" cancel: "取消" enterUsername: "输入用户名" -renotedBy: "转发自 {user}" +renotedBy: "{user} 转发了" noNotes: "没有帖子" noNotifications: "没有通知" instance: "服务器" @@ -58,7 +58,7 @@ followRequestAccepted: "关注请求已通过" mention: "提及" mentions: "提及" directNotes: "私信" -importAndExport: "导入/导出数据" +importAndExport: "导入 / 导出数据" import: "导入" export: "导出" files: "文件" @@ -69,7 +69,7 @@ exportRequested: "导出请求已提交,这可能需要花一些时间,导 importRequested: "导入请求已提交,这可能需要花一点时间。" lists: "列表" noLists: "列表为空" -note: "帖子" +note: "发帖" notes: "帖子" following: "关注中" followers: "关注者" @@ -243,7 +243,7 @@ saved: "已保存" messaging: "聊天" upload: "本地上传" keepOriginalUploading: "保留原图" -keepOriginalUploadingDescription: "上传图片时保留原始图片。如果关闭,会在上传时生成一张用于 web 发布的图片。" +keepOriginalUploadingDescription: "上传图片时保留原始图片。如果关闭,会在上传时生成一张用于 Web 发布的图片。" fromDrive: "从网盘中" fromUrl: "从 URL" uploadFromUrl: "从 URL 上传" @@ -675,7 +675,7 @@ driveFilesCount: "网盘的文件数" driveUsage: "网盘的空间用量" noCrawle: "要求搜索引擎不索引该用户" noCrawleDescription: "要求外部搜索引擎不收录(索引)您的内容。" -lockedAccountInfo: "即使通过了关注请求,只要您不将帖子可见范围设置成“关注者”,任何人都可以看到您的帖子。" +lockedAccountInfo: "即使通过了关注请求,只要您不将帖子可见范围设置成「关注者」,任何人都可以看到您的帖子。" alwaysMarkSensitive: "默认将媒体文件标记为敏感内容" loadRawImages: "加载原始图像而不是显示缩略图" disableShowingAnimatedImages: "不播放动画" @@ -690,8 +690,8 @@ useSystemFont: "使用系统默认字体" clips: "便签" experimentalFeatures: "实验性功能" developer: "开发者" -makeExplorable: "使账号在“发现”中可见" -makeExplorableDescription: "关闭时,账号不会显示在\"发现\"中。" +makeExplorable: "使账号在「发现」中可见" +makeExplorableDescription: "关闭时,账号不会显示在「发现」中。" showGapBetweenNotesInTimeline: "时间线上的帖子分开显示" duplicate: "复制" left: "左" @@ -823,8 +823,8 @@ makeReactionsPublicDescription: "将您发表过的回应设置成公开可见 classic: "居中" muteThread: "静音帖子串" unmuteThread: "取消静音帖子串" -ffVisibility: "关注/关注者 可见性" -ffVisibilityDescription: "您可以设置谁可以看到您的关注/关注者信息。" +ffVisibility: "关注 / 关注者可见性" +ffVisibilityDescription: "您可以设置谁可以看到您的关注 / 关注者信息。" continueThread: "查看更多帖子" deleteAccountConfirm: "这将不可逆转地删除账号,是否继续?" incorrectPassword: "密码错误。" @@ -922,7 +922,7 @@ _emailUnavailable: _ffVisibility: public: "公开" followers: "仅对关注者可见" - private: "私信" + private: "私密" _signup: almostThere: "即将完成" emailAddressInfo: "请输入您所使用的电子邮件地址,它不会公开显示。" @@ -1238,15 +1238,15 @@ _tutorial: step4_2: "对于第一条帖子,可以做一个 {introduction} 或一个简单的 \"hello world!\"" step5_1: "时间线,无处不在的时间线!" step5_2: "您的服务器已启用 {timelines} 种不同的时间线。" - step5_3: "主页 {icon} 时间线是您可以看到您关注账号的帖子的时间线。" + step5_3: "首页{icon}时间线是您可以看到您关注账号的帖子的时间线。" step5_4: "本地{icon}时间线是您可以看到此服务器上其它用户的帖子的时间线。" step5_5: "社交{icon}时间线是主页和本地时间线的结合。" step5_6: "推荐{icon}时间线是您可以看到管理员推荐服务器的帖子的时间线。" - step5_7: "全球{icon}时间线是您可以看到来自其它所有互联服务器的帖子的时间线。" + step5_7: "全局{icon}时间线是您可以看到来自其它所有互联服务器的帖子的时间线。" step6_1: "那么,这里是什么地方?" step6_2: "好吧,您不只是加入 Firefish。您已经加入了 Fediverse 的一个门户,这是一个由成千上万台服务器组成的互联网络。" step6_3: "每个服务器的工作方式不同,并不是所有的服务器都运行 Firefish。但这个服务器是的! 这有点复杂,但您很快就会明白的。" - step6_4: "现在,去吧,去探索,去享受乐趣吧!" + step6_4: "现在,去吧,去探索,去享受乐趣吧!" _2fa: alreadyRegistered: "您已经注册了两步验证设备。" registerTOTP: "注册身份验证器应用" @@ -1918,7 +1918,7 @@ _skinTones: isModerator: 监察员 isAdmin: 管理员 findOtherInstance: 寻找其它服务器 -moveFromDescription: 这将为您的旧账号设置一个别名,以便您可以从该旧账号迁移到当前账号。在从旧账号迁移之前执行此操作。请输入格式如@person@server.com +moveFromDescription: 这将为您的旧账号设置一个别名,以便您可以从该旧账号迁移到当前账号。在从旧账号迁移之前执行此操作。请输入格式如 @person@server.com 的账号标签 indexPosts: 索引帖子 signupsDisabled: 该服务器目前关闭注册,但您随时可以在另一台服务器上注册!如果您有该服务器的邀请码,请在下面输入。 diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml index 9b25786e..f59b5237 100644 --- a/locales/zh-TW.yml +++ b/locales/zh-TW.yml @@ -458,7 +458,7 @@ youHaveNoGroups: "找不到群組" joinOrCreateGroup: "請加入現有群組,或創建新群組。" noHistory: "沒有歷史紀錄" signinHistory: "登入歷史" -disableAnimatedMfm: "禁用MFM動畫" +disableAnimatedMfm: "停用MFM動畫" doing: "正在處理..." category: "類別" tags: "標籤" @@ -596,7 +596,7 @@ emptyToDisableSmtpAuth: "留空使用者名稱及密碼以關閉SMTP驗證" smtpSecure: "在 SMTP 連接中使用隱式 SSL/TLS" smtpSecureInfo: "如使用STARTTLS,請關閉" testEmail: "測試郵件發送" -wordMute: "被靜音的文字" +wordMute: "被靜音的文字及語言" regexpError: "正規表達式錯誤" regexpErrorDescription: "{tab} 靜音文字的第 {line} 行的正規表達式有錯誤:" instanceMute: "伺服器的靜音" @@ -765,7 +765,7 @@ user: "使用者" administration: "管理" accounts: "帳戶" switch: "切換" -noMaintainerInformationWarning: "尚未設定管理員信息。" +noMaintainerInformationWarning: "尚未設定管理員資訊。" noBotProtectionWarning: "尚未設定Bot防護。" configure: "設定" postToGallery: "發佈到相簿" @@ -899,7 +899,7 @@ customKaTeXMacro: "自訂KaTeX巨集" customKaTeXMacroDescription: "使用巨集來輕鬆輸入數學表達式吧!巨集的用法與 LaTeX 中的命令定義相同。你可以使用 \\newcommand{\\ name}{content} 或 \\newcommand{\\name}[number of arguments]{content} 來輸入數學表達式。舉例來說,\\ newcommand{\\add}[2]{#1 + #2} 會將 \\add{3}{foo} 展開為 3 + foo。巨集名稱除了可用大括號 {} 括起來之外,也可使用小括號 - () 和中括號 [],但使用於巨集參數的括號會有所變更。每行只能夠定義一個巨集,巨集中間無法間換。無效的行將被忽略。只支援簡單字串的替換功能,不支援條件分歧的高級語法。" + () 和中括號 [],但使用於巨集參數的括號會有所變更。每行只能夠定義一個巨集,巨集中間無法間換。無效的行將被忽略。只支援簡單字串的替換功能,不支援條件分歧的進階語法。" enableCustomKaTeXMacro: "啟用自定義 KaTeX 宏" _sensitiveMediaDetection: description: "您可以使用機器學習自動檢測敏感媒體並將其用於審核。 伺服器的負荷會稍微增加。" @@ -932,7 +932,7 @@ _accountDelete: inProgress: "正在刪除" _ad: back: "返回" - reduceFrequencyOfThisAd: "降低此廣告的頻率" + reduceFrequencyOfThisAd: "降低此橫幅的頻率" _forgotPassword: enterEmail: "請輸入您的帳戶註冊的電子郵件地址。 密碼重置連結將被發送到該電子郵件地址。" ifNoEmail: "如果您還沒有註冊您的電子郵件地址,請聯繫管理員。" @@ -1027,7 +1027,7 @@ _mfm: emoji: "自訂表情符號" emojiDescription: "您可以通過將自定義表情符號名稱括在冒號中來顯示自定義表情符號。" search: "搜尋" - searchDescription: "您可以顯示所輸入的搜索框。" + searchDescription: "顯示含有指定文字的搜尋欄。" flip: "翻轉" flipDescription: "將內容上下或左右翻轉。" jelly: "動畫(果凍)" @@ -1069,7 +1069,7 @@ _mfm: alwaysPlay: 自動播放所有MFM動畫 positionDescription: 按指定數量移動內容。 advancedDescription: 如果停用,僅顯示基礎MFM及正在播放的MFM動畫 - advanced: 高級MFM + advanced: 進階MFM fade: 淡出 foreground: 文字顏色 crop: 裁切 @@ -1231,7 +1231,7 @@ _tutorial: step3_1: "現在是時候追隨一些人了!" step3_2: "你的主頁和社交時間線是基於你所追蹤的人,所以試著先追蹤幾個帳戶。\n點擊個人資料右上角的加號圈就可以關注它。" step4_1: "讓我們出去找你。" - step4_2: "對於他們的第一條信息,有些人喜歡做 {introduction} 或一個簡單的 \"hello world!\"" + step4_2: "作為第一則貼文,有些人喜歡發 {introduction} 或單純發一個 \"hello world!\"" step5_1: "時間線,到處都是時間線!" step5_2: "您的伺服器已啟用了{timelines}個時間線。" step5_3: "首頁 {icon} 時間線是顯示你追蹤的帳號的貼文。" @@ -1816,7 +1816,7 @@ _deck: secureMode: 安全模式(授權獲取) instanceSecurity: 伺服器安全性 privateMode: 私人模式 -allowedInstances: 列入白名單的伺服器 +allowedInstances: 列入允許名單的伺服器 secureModeInfo: 當從其他伺服器請求時,不要在沒有證據的情況下發回。 _messaging: dms: 私訊 @@ -1824,8 +1824,8 @@ _messaging: manageGroups: 管理群組 replayTutorial: 重新播放教程 moveFromLabel: '您想遷移的舊帳戶:' -customMOTDDescription: 每次用戶加載/重新加載頁面時,由換行符號分隔的 MOTD(啟動畫面)的自定信息將隨機顯示。 -privateModeInfo: 啟用後,只有列入白名單的伺服器才能與你的伺服器聯合。所有貼文都將對公眾隱藏。 +customMOTDDescription: 自訂MOTD(啟動畫面)訊息,一行一個。每次用戶載入/重新整理頁面時將會隨機顯示。 +privateModeInfo: 啟用後,只有列入允許名單的伺服器才能與你的伺服器聯合。所有貼文都將對公眾隱藏。 adminCustomCssWarn: 除非你知道它的作用,否則請不要使用此設定。 輸入不正確的值可能會導致每個人的客戶端無法正常運行。你可在你的的用戶設定中測試,確保你的 CSS 正常工作。 showUpdates: Firefish 更新時顯示彈出視窗 @@ -1853,7 +1853,7 @@ enableEmojiReactions: 啟用表情符號反應 breakFollowConfirm: 您確定要移除該關注者嗎? socialTimeline: 社交時間軸 cannotUploadBecauseExceedsFileSizeLimit: 因檔案太大而無法上傳。 -customMOTD: 自定義MOTD (網頁載入時顯示的信息) +customMOTD: 自定義MOTD (網頁載入時顯示的訊息) customSplashIcons: 啟動畫面圖標 (網址) splash: 啟動畫面 updateAvailable: 可能有可用的更新! @@ -1872,7 +1872,7 @@ _experiments: title: 試驗功能 enablePostImports: 啟用匯入貼文的功能 findOtherInstance: 找找另一個伺服器 -noGraze: 瀏覽器擴展 "Graze for Mastodon" 會與Firefish發生衝突,請停用該擴展。 +noGraze: 瀏覽器擴充元件 "Graze for Mastodon" 會與Firefish發生衝突,請停用該擴充元件。 userSaysSomethingReasonRenote: '{name} 轉發了包含 {reason} 的貼文' pushNotificationNotSupported: 你的瀏覽器或伺服器不支援推送通知 accessibility: 輔助功能 @@ -1884,13 +1884,13 @@ deleted: 已刪除 editNote: 編輯貼文 edited: '於 {date} {time} 編輯' userSaysSomethingReason: '{name} 說了 {reason}' -allowedInstancesDescription: 要加入聯邦白名單的服務器,每台伺服器用新行分隔(僅適用於私有模式)。 +allowedInstancesDescription: 允許聯邦的伺服器名單,一行一個(僅適用於私人模式)。 defaultReaction: 默認的表情符號反應 license: 授權 apps: 應用 pushNotification: 推送通知 subscribePushNotification: 啟用推送通知 -unsubscribePushNotification: 禁用推送通知 +unsubscribePushNotification: 停用推送通知 pushNotificationAlreadySubscribed: 推送通知已經啟用 recommendedInstancesDescription: 以每行分隔的推薦伺服器出現在推薦的時間線中。 searchPlaceholder: 在 Firefish 上搜尋 @@ -1933,7 +1933,7 @@ isModerator: 板主 isAdmin: 管理員 isPatron: Firefish 項目贊助者 silencedWarning: 顯示此頁面是因為這些使用者來自您伺服器管理員已靜音的伺服器,因此他們可能是垃圾訊息。 -signupsDisabled: 該伺服器上的註冊當前已被禁用,但您隨時可以在另一台伺服器上註冊!或是您有該伺服器的邀請碼,請在下面輸入。 +signupsDisabled: 此伺服器目前停止註冊,但您隨時可以在另一台伺服器上註冊!如果您有此伺服器的邀請碼,請在下面輸入。 showPopup: 通過彈出式視窗通知用戶 showWithSparkles: 讓標題閃閃發光 youHaveUnreadAnnouncements: 您有未讀的公告 diff --git a/neko/UPSTREAM_COMMIT_ID b/neko/UPSTREAM_COMMIT_ID index 73693162..9e1dc9f5 100644 --- a/neko/UPSTREAM_COMMIT_ID +++ b/neko/UPSTREAM_COMMIT_ID @@ -1 +1 @@ -2cd036b102edbf63fadb68e3841e4c912032f993 +696d3c6255b3608a8de59fcac5aea3d08b2eeebe diff --git a/package.json b/package.json index 66b53a52..6e477868 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,17 @@ { "name": "firefish", - "version": "1.0.5-dev17", + "version": "1.0.5-dev18", "codename": "aqua", "repository": { "type": "git", "url": "https://code.naskya.net/naskya/firefish" }, - "packageManager": "pnpm@8.7.6", + "packageManager": "pnpm@8.8.0", "private": true, "scripts": { - "rebuild": "pnpm run clean && ./scripts/build-greet.sh && pnpm --filter !sw -r --parallel run build && pnpm --filter sw run build && pnpm run gulp", - "build": "./scripts/build-greet.sh && pnpm --filter !sw -r --parallel run build && pnpm --filter sw run build && pnpm run gulp", + "rebuild": "pnpm run clean && pnpm run build", + "build": "./scripts/build-greet.sh && pnpm --filter firefish-js run build && pnpm --filter !firefish-js -r --parallel run build && pnpm run gulp", "start": "pnpm --filter backend run start", - "start:test": "pnpm --filter backend run start:test", "init": "pnpm run migrate", "migrate": "pnpm --filter backend run migrate", "revertmigration": "pnpm --filter backend run revertmigration", @@ -58,7 +57,7 @@ "gulp-replace": "1.1.4", "gulp-terser": "2.1.0", "install-peers": "^1.0.4", - "pnpm": "8.7.1", + "pnpm": "8.8.0", "typescript": "5.2.2" } } diff --git a/packages/README.md b/packages/README.md index ea04817f..75e38a49 100644 --- a/packages/README.md +++ b/packages/README.md @@ -7,4 +7,3 @@ This directory contains all of the packages Firefish uses. - `client`: Web interface written in Vue3 and TypeScript - `sw`: Web [Service Worker](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API) written in TypeScript - `firefish-js`: TypeScript SDK for both backend and client, also published on [NPM](https://www.npmjs.com/package/firefish-js) for public use -- `megalodon`: TypeScript library used for partial Mastodon API compatibility diff --git a/packages/backend/assets/badges/error.png b/packages/backend/assets/badges/error.png deleted file mode 100644 index 046f18e1..00000000 Binary files a/packages/backend/assets/badges/error.png and /dev/null differ diff --git a/packages/backend/assets/badges/error.webp b/packages/backend/assets/badges/error.webp new file mode 100644 index 00000000..ccdf7ebc Binary files /dev/null and b/packages/backend/assets/badges/error.webp differ diff --git a/packages/backend/assets/badges/info.png b/packages/backend/assets/badges/info.png deleted file mode 100644 index c6ab300a..00000000 Binary files a/packages/backend/assets/badges/info.png and /dev/null differ diff --git a/packages/backend/assets/badges/info.webp b/packages/backend/assets/badges/info.webp new file mode 100644 index 00000000..cce0a32d Binary files /dev/null and b/packages/backend/assets/badges/info.webp differ diff --git a/packages/backend/assets/badges/not-found.png b/packages/backend/assets/badges/not-found.png deleted file mode 100644 index 63356530..00000000 Binary files a/packages/backend/assets/badges/not-found.png and /dev/null differ diff --git a/packages/backend/assets/badges/not-found.webp b/packages/backend/assets/badges/not-found.webp new file mode 100644 index 00000000..502f09fa Binary files /dev/null and b/packages/backend/assets/badges/not-found.webp differ diff --git a/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-700.woff2 b/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-700.woff2 new file mode 100644 index 00000000..f3898921 Binary files /dev/null and b/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-700.woff2 differ diff --git a/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-700italic.woff2 b/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-700italic.woff2 new file mode 100644 index 00000000..9aac4b88 Binary files /dev/null and b/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-700italic.woff2 differ diff --git a/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-italic.woff2 b/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-italic.woff2 new file mode 100644 index 00000000..ce7c7fed Binary files /dev/null and b/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-italic.woff2 differ diff --git a/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-regular.woff2 b/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-regular.woff2 new file mode 100644 index 00000000..7093c429 Binary files /dev/null and b/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-regular.woff2 differ diff --git a/packages/backend/native-utils/package.json b/packages/backend/native-utils/package.json index 4059ac75..13b57f78 100644 --- a/packages/backend/native-utils/package.json +++ b/packages/backend/native-utils/package.json @@ -41,7 +41,7 @@ "prepublishOnly": "napi prepublish -t npm", "universal": "napi universal", "version": "napi version", - "format": "cargo fmt --all -- --check", - "lint": "cargo clippy --fix --allow-dirty --allow-staged && cargo fmt --all -- --check" + "format": "cargo fmt --all --", + "lint": "cargo clippy --fix --allow-dirty --allow-staged && cargo fmt --all --" } } diff --git a/packages/backend/package.json b/packages/backend/package.json index 8e40db2a..9d039d27 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -85,7 +85,7 @@ "koa-send": "5.0.1", "koa-slow": "2.1.0", "koa-views": "7.0.2", - "megalodon": "workspace:*", + "megalodon": "8.1.1", "meilisearch": "0.34.1", "mfm-js": "0.23.3", "mime-types": "2.1.35", diff --git a/packages/backend/src/misc/detect-language.ts b/packages/backend/src/misc/detect-language.ts new file mode 100644 index 00000000..6147247d --- /dev/null +++ b/packages/backend/src/misc/detect-language.ts @@ -0,0 +1,11 @@ +import { detect } from "tinyld"; +import * as mfm from "mfm-js"; + +export default function detectLanguage(text: string): string { + const nodes = mfm.parse(text); + const filtered = mfm.extract(nodes, (node) => { + return node.type === "text" || node.type === "quote"; + }); + const purified = mfm.toString(filtered); + return detect(purified); +} diff --git a/packages/backend/src/misc/nyaize.ts b/packages/backend/src/misc/nyaize.ts index 13a112ce..32c54fbd 100644 --- a/packages/backend/src/misc/nyaize.ts +++ b/packages/backend/src/misc/nyaize.ts @@ -1,28 +1,31 @@ -export function nyaize(text: string): string { - return ( - text - // ja-JP - .replaceAll("な", "にゃ") - .replaceAll("ナ", "ニャ") - .replaceAll("ナ", "ニャ") - // en-US - .replace(/(?<=n)a/gi, (x) => (x === "A" ? "YA" : "ya")) - .replace(/(?<=morn)ing/gi, (x) => (x === "ING" ? "YAN" : "yan")) - .replace(/(?<=every)one/gi, (x) => (x === "ONE" ? "NYAN" : "nyan")) - .replace(/non(?=[bcdfghjklmnpqrstvwxyz])/gi, (x) => - x === "NON" ? "NYAN" : "nyan", - ) - // ko-KR - .replace(/[나-낳]/g, (match) => - String.fromCharCode( - match.charCodeAt(0)! + "냐".charCodeAt(0) - "나".charCodeAt(0), - ), - ) - .replace(/(다$)|(다(?=\.))|(다(?= ))|(다(?=!))|(다(?=\?))/gm, "다냥") - .replace(/(야(?=\?))|(야$)|(야(?= ))/gm, "냥") - // el-GR - .replaceAll("να", "νια") - .replaceAll("ΝΑ", "ΝΙΑ") - .replaceAll("Να", "Νια") - ); +export function nyaize(text: string, lang?: string): string { + text = text + // ja-JP + .replaceAll("な", "にゃ") + .replaceAll("ナ", "ニャ") + .replaceAll("ナ", "ニャ") + // en-US + .replace(/(?<=n)a/gi, (x) => (x === "A" ? "YA" : "ya")) + .replace(/(?<=morn)ing/gi, (x) => (x === "ING" ? "YAN" : "yan")) + .replace(/(?<=every)one/gi, (x) => (x === "ONE" ? "NYAN" : "nyan")) + .replace(/non(?=[bcdfghjklmnpqrstvwxyz])/gi, (x) => + x === "NON" ? "NYAN" : "nyan", + ) + // ko-KR + .replace(/[나-낳]/g, (match) => + String.fromCharCode( + match.charCodeAt(0)! + "냐".charCodeAt(0) - "나".charCodeAt(0), + ), + ) + .replace(/(다$)|(다(?=\.))|(다(?= ))|(다(?=!))|(다(?=\?))/gm, "다냥") + .replace(/(야(?=\?))|(야$)|(야(?= ))/gm, "냥") + // el-GR + .replaceAll("να", "νια") + .replaceAll("ΝΑ", "ΝΙΑ") + .replaceAll("Να", "Νια"); + + // zh-CN, zh-TW + if (lang === "zh") text = text.replace(/(妙|庙|描|渺|瞄|秒|苗|藐|廟)/g, "喵"); + + return text; } diff --git a/packages/backend/src/misc/reaction-lib.ts b/packages/backend/src/misc/reaction-lib.ts index 77524057..db88b059 100644 --- a/packages/backend/src/misc/reaction-lib.ts +++ b/packages/backend/src/misc/reaction-lib.ts @@ -4,11 +4,6 @@ import { Emojis } from "@/models/index.js"; import { toPunyNullable } from "./convert-host.js"; import { IsNull } from "typeorm"; -export async function getFallbackReaction() { - const meta = await fetchMeta(); - return meta.defaultReaction; -} - export function convertReactions(reactions: Record) { const result = new Map(); @@ -26,11 +21,11 @@ export async function toDbReaction( reaction?: string | null, reacterHost?: string | null, ): Promise { - if (!reaction) return await getFallbackReaction(); + if (!reaction) return (await fetchMeta()).defaultReaction; reacterHost = toPunyNullable(reacterHost); - if (reaction === "♥️") return "❤️"; + if (reaction.includes("❤") || reaction.includes("♥️")) return "❤️"; // Allow unicode reactions const match = emojiRegex.exec(reaction); @@ -50,7 +45,7 @@ export async function toDbReaction( if (emoji) return reacterHost ? `:${name}@${reacterHost}:` : `:${name}:`; } - return await getFallbackReaction(); + return (await fetchMeta()).defaultReaction; } type DecodedReaction = { diff --git a/packages/backend/src/models/entities/meta.ts b/packages/backend/src/models/entities/meta.ts index f7217078..5fcc7487 100644 --- a/packages/backend/src/models/entities/meta.ts +++ b/packages/backend/src/models/entities/meta.ts @@ -162,7 +162,7 @@ export class Meta { @Column("varchar", { length: 512, nullable: true, - default: "/static-assets/badges/info.png", + default: "/static-assets/badges/info.webp", }) public mascotImageUrl: string | null; @@ -187,7 +187,7 @@ export class Meta { @Column("varchar", { length: 512, nullable: true, - default: "/static-assets/badges/error.png", + default: "/static-assets/badges/error.webp", }) public errorImageUrl: string | null; diff --git a/packages/backend/src/models/repositories/note.ts b/packages/backend/src/models/repositories/note.ts index 7e90b7de..60e5a8d5 100644 --- a/packages/backend/src/models/repositories/note.ts +++ b/packages/backend/src/models/repositories/note.ts @@ -23,7 +23,6 @@ import { } from "@/misc/populate-emojis.js"; import { db } from "@/db/postgre.js"; import { IdentifiableError } from "@/misc/identifiable-error.js"; -import { detect as detectLanguage } from "tinyld"; export async function populatePoll(note: Note, meId: User["id"] | null) { const poll = await Polls.findOneByOrFail({ noteId: note.id }); @@ -265,7 +264,8 @@ export const NoteRepository = db.getRepository(Note).extend({ const tokens = packed.text ? mfm.parse(packed.text) : []; function nyaizeNode(node: mfm.MfmNode) { if (node.type === "quote") return; - if (node.type === "text") node.props.text = nyaize(node.props.text); + if (node.type === "text") + node.props.text = nyaize(node.props.text, packed.lang); if (node.children) { for (const child of node.children) { diff --git a/packages/backend/src/models/schema/user.ts b/packages/backend/src/models/schema/user.ts index d625308f..61c20a89 100644 --- a/packages/backend/src/models/schema/user.ts +++ b/packages/backend/src/models/schema/user.ts @@ -24,7 +24,7 @@ export const packedUserLiteSchema = { type: "string", nullable: true, optional: false, - example: "misskey.example.com", + example: "firefish.example.com", description: "The local host is represented with `null`.", }, avatarUrl: { diff --git a/packages/backend/src/remote/activitypub/renderer/note.ts b/packages/backend/src/remote/activitypub/renderer/note.ts index 4c7650e8..b840e2d6 100644 --- a/packages/backend/src/remote/activitypub/renderer/note.ts +++ b/packages/backend/src/remote/activitypub/renderer/note.ts @@ -1,12 +1,12 @@ import { In, IsNull } from "typeorm"; -import { detect as detectLanguage } from "tinyld"; import config from "@/config/index.js"; import type { Note, IMentionedRemoteUsers } from "@/models/entities/note.js"; import type { DriveFile } from "@/models/entities/drive-file.js"; import { DriveFiles, Notes, Users, Emojis, Polls } from "@/models/index.js"; import type { Emoji } from "@/models/entities/emoji.js"; import type { Poll } from "@/models/entities/poll.js"; -import toHtml from "../misc/get-note-html.js"; +import toHtml from "@/remote/activitypub/misc/get-note-html.js"; +import detectLanguage from "@/misc/detect-language.js"; import renderEmoji from "./emoji.js"; import renderMention from "./mention.js"; import renderHashtag from "./hashtag.js"; diff --git a/packages/backend/src/server/api/endpoints/admin/meta.ts b/packages/backend/src/server/api/endpoints/admin/meta.ts index 9abb57b1..15f2c966 100644 --- a/packages/backend/src/server/api/endpoints/admin/meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/meta.ts @@ -64,7 +64,7 @@ export const meta = { type: "string", optional: false, nullable: false, - default: "/static-assets/badges/info.png", + default: "/static-assets/badges/info.webp", }, bannerUrl: { type: "string", @@ -75,7 +75,7 @@ export const meta = { type: "string", optional: false, nullable: false, - default: "/static-assets/badges/error.png", + default: "/static-assets/badges/error.webp", }, iconUrl: { type: "string", diff --git a/packages/backend/src/server/api/endpoints/admin/send-mod-mail.ts b/packages/backend/src/server/api/endpoints/admin/send-mod-mail.ts index db12ab6c..a36dca2f 100644 --- a/packages/backend/src/server/api/endpoints/admin/send-mod-mail.ts +++ b/packages/backend/src/server/api/endpoints/admin/send-mod-mail.ts @@ -49,7 +49,7 @@ export default define(meta, paramDef, async (ps) => { createNotification(user.id, "app", { customBody: ps.comment, customHeader: "Moderation Notice", - customIcon: "/static-assets/badges/info.png", + customIcon: "/static-assets/badges/info.webp", }); setImmediate(async () => { diff --git a/packages/backend/src/server/api/endpoints/meta.ts b/packages/backend/src/server/api/endpoints/meta.ts index 53352f69..134b538d 100644 --- a/packages/backend/src/server/api/endpoints/meta.ts +++ b/packages/backend/src/server/api/endpoints/meta.ts @@ -155,7 +155,7 @@ export const meta = { type: "string", optional: false, nullable: false, - default: "/static-assets/badges/info.png", + default: "/static-assets/badges/info.webp", }, bannerUrl: { type: "string", @@ -166,7 +166,7 @@ export const meta = { type: "string", optional: false, nullable: false, - default: "/static-assets/badges/error.png", + default: "/static-assets/badges/error.webp", }, iconUrl: { type: "string", diff --git a/packages/backend/src/server/api/endpoints/notes/edit.ts b/packages/backend/src/server/api/endpoints/notes/edit.ts index 9add5767..e6d39c52 100644 --- a/packages/backend/src/server/api/endpoints/notes/edit.ts +++ b/packages/backend/src/server/api/endpoints/notes/edit.ts @@ -35,8 +35,8 @@ import renderUpdate from "@/remote/activitypub/renderer/update.js"; import { deliverToRelays } from "@/services/relay.js"; // import { deliverQuestionUpdate } from "@/services/note/polls/update.js"; import { fetchMeta } from "@/misc/fetch-meta.js"; -import { detect as detectLanguage } from "tinyld"; import { langmap } from "@/misc/langmap.js"; +import detectLanguage from "@/misc/detect-language.js"; export const meta = { tags: ["notes"], diff --git a/packages/backend/src/server/api/endpoints/notes/search.ts b/packages/backend/src/server/api/endpoints/notes/search.ts index 8c5798b6..6247bd65 100644 --- a/packages/backend/src/server/api/endpoints/notes/search.ts +++ b/packages/backend/src/server/api/endpoints/notes/search.ts @@ -62,6 +62,7 @@ export const paramDef = { type: "string", default: "chronological", nullable: true, + description: "Either 'chronological' or 'relevancy'", }, }, required: ["query"], @@ -75,9 +76,11 @@ export default define(meta, paramDef, async (ps, me) => { ps.untilId, ); - if (ps.userId) { + if (ps.userId != null) { query.andWhere("note.userId = :userId", { userId: ps.userId }); - } else if (ps.channelId) { + } + + if (ps.channelId != null) { query.andWhere("note.channelId = :channelId", { channelId: ps.channelId, }); diff --git a/packages/backend/src/server/api/mastodon/ApiMastodonCompatibleService.ts b/packages/backend/src/server/api/mastodon/ApiMastodonCompatibleService.ts index 44485ac4..3f6e671b 100644 --- a/packages/backend/src/server/api/mastodon/ApiMastodonCompatibleService.ts +++ b/packages/backend/src/server/api/mastodon/ApiMastodonCompatibleService.ts @@ -24,7 +24,11 @@ export function getClient( const accessTokenArr = authorization?.split(" ") ?? [null]; const accessToken = accessTokenArr[accessTokenArr.length - 1]; const generator = (megalodon as any).default; - const client = generator(BASE_URL, accessToken) as MegalodonInterface; + const client = generator( + "firefish", + BASE_URL, + accessToken, + ) as MegalodonInterface; return client; } diff --git a/packages/backend/src/server/api/mastodon/endpoints/auth.ts b/packages/backend/src/server/api/mastodon/endpoints/auth.ts index b55cb638..3d6eb8c4 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/auth.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/auth.ts @@ -68,7 +68,7 @@ export function apiAuthMastodon(router: Router): void { website: body.website, redirect_uri: red, client_id: Buffer.from(appData.url || "").toString("base64"), - client_secret: appData.clientSecret, + client_secret: appData.client_secret, }; console.log(returns); ctx.body = returns; diff --git a/packages/backend/src/server/api/mastodon/endpoints/search.ts b/packages/backend/src/server/api/mastodon/endpoints/search.ts index 8a481755..5bd24ca8 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/search.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/search.ts @@ -1,8 +1,7 @@ -import megalodon, { MegalodonInterface } from "megalodon"; import Router from "@koa/router"; import { getClient } from "../ApiMastodonCompatibleService.js"; import axios from "axios"; -import { Converter } from "megalodon"; +import Converter from "megalodon"; import { convertTimelinesArgsId, limitToInt } from "./timeline.js"; import { convertAccount, convertStatus } from "../converters.js"; diff --git a/packages/backend/src/server/api/mastodon/endpoints/status.ts b/packages/backend/src/server/api/mastodon/endpoints/status.ts index c3e6946e..2c35843d 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/status.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/status.ts @@ -12,6 +12,7 @@ import { convertPoll, convertStatus, } from "../converters.js"; +import { fetchMeta } from "@/misc/fetch-meta.js"; function normalizeQuery(data: any) { const str = querystring.stringify(data); @@ -216,10 +217,11 @@ export function apiStatusMastodon(router: Router): void { router.post<{ Params: { id: string } }>( "/v1/statuses/:id/favourite", async (ctx) => { + const meta = await fetchMeta(); const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); - const react = await getFirstReaction(BASE_URL, accessTokens); + const react = meta.defaultReaction; try { const a = (await client.createEmojiReaction( convertId(ctx.params.id, IdType.FirefishId), @@ -238,10 +240,11 @@ export function apiStatusMastodon(router: Router): void { router.post<{ Params: { id: string } }>( "/v1/statuses/:id/unfavourite", async (ctx) => { + const meta = await fetchMeta(); const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); - const react = await getFirstReaction(BASE_URL, accessTokens); + const react = meta.defaultReaction; try { const data = await client.deleteEmojiReaction( convertId(ctx.params.id, IdType.FirefishId), @@ -377,7 +380,7 @@ export function apiStatusMastodon(router: Router): void { const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); try { - const data = await client.reactStatus( + const data = await client.createEmojiReaction( convertId(ctx.params.id, IdType.FirefishId), ctx.params.name, ); @@ -397,7 +400,7 @@ export function apiStatusMastodon(router: Router): void { const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); try { - const data = await client.unreactStatus( + const data = await client.deleteEmojiReaction( convertId(ctx.params.id, IdType.FirefishId), ctx.params.name, ); @@ -476,25 +479,3 @@ export function apiStatusMastodon(router: Router): void { }, ); } - -async function getFirstReaction( - BASE_URL: string, - accessTokens: string | undefined, -) { - const accessTokenArr = accessTokens?.split(" ") ?? [null]; - const accessToken = accessTokenArr[accessTokenArr.length - 1]; - let react = "⭐"; - try { - const api = await axios.post(`${BASE_URL}/api/i/registry/get-unsecure`, { - scope: ["client", "base"], - key: "reactions", - i: accessToken, - }); - const reactRaw = api.data; - react = Array.isArray(reactRaw) ? api.data[0] : "⭐"; - console.log(api.data); - return react; - } catch (e) { - return react; - } -} diff --git a/packages/backend/src/server/api/stream/index.ts b/packages/backend/src/server/api/stream/index.ts index e4836831..5a47f2cb 100644 --- a/packages/backend/src/server/api/stream/index.ts +++ b/packages/backend/src/server/api/stream/index.ts @@ -25,7 +25,7 @@ import { readNotification } from "../common/read-notification.js"; import channels from "./channels/index.js"; import type Channel from "./channel.js"; import type { StreamEventEmitter, StreamMessages } from "./types.js"; -import { Converter } from "megalodon"; +import Converter from "megalodon"; import { getClient } from "../mastodon/ApiMastodonCompatibleService.js"; /** diff --git a/packages/backend/src/server/index.ts b/packages/backend/src/server/index.ts index 92961d33..b967754d 100644 --- a/packages/backend/src/server/index.ts +++ b/packages/backend/src/server/index.ts @@ -163,11 +163,10 @@ mastoRouter.post("/oauth/token", async (ctx) => { ctx.body = ret; return; } - let client_id: any = body.client_id; + let client_id: Array | string | null = body.client_id; const BASE_URL = `${ctx.request.protocol}://${ctx.request.hostname}`; const generator = (megalodon as any).default; - const client = generator(BASE_URL, null) as MegalodonInterface; - let m = null; + const client = generator("firefish", BASE_URL, null) as MegalodonInterface; let token = null; if (body.code) { //m = body.code.match(/^([a-zA-Z0-9]{8})([a-zA-Z0-9]{4})([a-zA-Z0-9]{4})([a-zA-Z0-9]{4})([a-zA-Z0-9]{12})/); @@ -191,7 +190,7 @@ mastoRouter.post("/oauth/token", async (ctx) => { token ? token : "", ); const ret = { - access_token: atData.accessToken, + access_token: atData.access_token, token_type: "Bearer", scope: body.scope || "read write follow push", created_at: Math.floor(new Date().getTime() / 1000), diff --git a/packages/backend/src/server/web/style.css b/packages/backend/src/server/web/style.css index cb99a160..2a932539 100644 --- a/packages/backend/src/server/web/style.css +++ b/packages/backend/src/server/web/style.css @@ -1,7 +1,18 @@ +/* atkinson-hyperlegible-regular - latin_latin-ext */ +@font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Atkinson Hyperlegible"; + font-style: normal; + font-weight: 400; + src: url("/static-assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-regular.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} + html { background-color: var(--bg); color: var(--fg); } + @media (prefers-color-scheme: dark) { html { --bg: rgb(17, 17, 27); @@ -104,7 +115,7 @@ html { } } -@media(prefers-reduced-motion) { +@media (prefers-reduced-motion) { #splashSpinner { display: block; } @@ -122,5 +133,5 @@ html { height: 0; text-align: center; padding-top: 100px; - font-family: sans-serif; + font-family: "Atkinson Hyperlegible", sans-serif; } diff --git a/packages/backend/src/server/web/views/base.pug b/packages/backend/src/server/web/views/base.pug index feb209ee..8036e10d 100644 --- a/packages/backend/src/server/web/views/base.pug +++ b/packages/backend/src/server/web/views/base.pug @@ -36,9 +36,9 @@ html link(rel='icon' href= icon || `/favicon.ico?${ timestamp }`) link(rel='apple-touch-icon' href= icon || `/apple-touch-icon.png?${ timestamp }`) link(rel='manifest' href='/manifest.json') - link(rel='prefetch' href=`/static-assets/badges/info.png?${ timestamp }`) - link(rel='prefetch' href=`/static-assets/badges/not-found.png?${ timestamp }`) - link(rel='prefetch' href=`/static-assets/badges/error.png?${ timestamp }`) + link(rel='prefetch' href=`/static-assets/badges/info.webp?${ timestamp }`) + link(rel='prefetch' href=`/static-assets/badges/not-found.webp?${ timestamp }`) + link(rel='prefetch' href=`/static-assets/badges/error.webp?${ timestamp }`) link(rel='stylesheet' href=`/static-assets/instance.css?${ timestamp }`) link(rel='modulepreload' href=`/assets/${clientEntry.file}`) diff --git a/packages/backend/src/services/drive/add-file.ts b/packages/backend/src/services/drive/add-file.ts index f7cca6f7..37b43dc2 100644 --- a/packages/backend/src/services/drive/add-file.ts +++ b/packages/backend/src/services/drive/add-file.ts @@ -88,7 +88,7 @@ async function save( if (type === "image/png") ext = ".png"; if (type === "image/webp") ext = ".webp"; if (type === "image/apng") ext = ".apng"; - if (type === "image/avif") ext = ".avif"; + if (type === "image/avif") ext = ".webp"; if (type === "image/vnd.mozilla.apng") ext = ".apng"; } diff --git a/packages/backend/src/services/note/create.ts b/packages/backend/src/services/note/create.ts index 3063894e..f19962d2 100644 --- a/packages/backend/src/services/note/create.ts +++ b/packages/backend/src/services/note/create.ts @@ -59,11 +59,11 @@ import type { UserProfile } from "@/models/entities/user-profile.js"; import { db } from "@/db/postgre.js"; import { getActiveWebhooks } from "@/misc/webhook-cache.js"; import { shouldSilenceInstance } from "@/misc/should-block-instance.js"; -import meilisearch from "../../db/meilisearch.js"; +import meilisearch from "@/db/meilisearch.js"; import { redisClient } from "@/db/redis.js"; import { Mutex } from "redis-semaphore"; -import { detect as detectLanguage } from "tinyld"; import { langmap } from "@/misc/langmap.js"; +import detectLanguage from "@/misc/detect-language.js"; const mutedWordsCache = new Cache< { userId: UserProfile["userId"]; mutedWords: UserProfile["mutedWords"] }[] diff --git a/packages/client/package.json b/packages/client/package.json index 072ee6c1..dac0a336 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -43,10 +43,10 @@ "chartjs-plugin-zoom": "2.0.1", "city-timezones": "^1.2.1", "compare-versions": "6.1.0", - "cropperjs": "2.0.0-beta.2", + "cropperjs": "2.0.0-beta.4", "cross-env": "7.0.3", "date-fns": "2.30.0", - "emojilib": "github:thatonecalculator/emojilib", + "emojilib": "^3.0.11", "escape-regexp": "0.0.1", "eslint-config-prettier": "9.0.0", "eslint-plugin-file-progress": "^1.3.0", diff --git a/packages/client/src/account.ts b/packages/client/src/account.ts index f68098e8..f3300a07 100644 --- a/packages/client/src/account.ts +++ b/packages/client/src/account.ts @@ -1,5 +1,5 @@ import { defineAsyncComponent, reactive } from "vue"; -import type * as misskey from "firefish-js"; +import type * as firefish from "firefish-js"; import { i18n } from "./i18n"; import { del, get, set } from "@/scripts/idb-proxy"; import { apiUrl } from "@/config"; @@ -8,7 +8,7 @@ import { reloadChannel, unisonReload } from "@/scripts/unison-reload"; // TODO: 他のタブと永続化されたstateを同期 -type Account = misskey.entities.MeDetailed; +type Account = firefish.entities.MeDetailed; const accountData = localStorage.getItem("account"); @@ -98,9 +98,9 @@ function fetchAccount(token: string): Promise { .then((res) => { if (res.error) { if (res.error.id === "a8c724b3-6e9c-4b46-b1a8-bc3ed6258370") { - showSuspendedDialog().then(() => { - signout(); - }); + showSuspendedDialog(); + signout(); + return; } else { alert({ type: "error", @@ -117,6 +117,14 @@ function fetchAccount(token: string): Promise { }); } +function showSuspendedDialog() { + alert({ + type: "error", + title: i18n.ts.yourAccountSuspendedTitle, + text: i18n.ts.yourAccountSuspendedDescription, + }); +} + export function updateAccount(accountData) { for (const [key, value] of Object.entries(accountData)) { $i[key] = value; @@ -151,8 +159,8 @@ export async function openAccountMenu( opts: { includeCurrentAccount?: boolean; withExtraOperation: boolean; - active?: misskey.entities.UserDetailed["id"]; - onChoose?: (account: misskey.entities.UserDetailed) => void; + active?: firefish.entities.UserDetailed["id"]; + onChoose?: (account: firefish.entities.UserDetailed) => void; }, ev: MouseEvent, isMobile?: boolean, @@ -185,7 +193,7 @@ export async function openAccountMenu( ); } - async function switchAccount(account: misskey.entities.UserDetailed) { + async function switchAccount(account: firefish.entities.UserDetailed) { const storedAccounts = await getAccounts(); const token = storedAccounts.find((x) => x.id === account.id).token; switchAccountWithToken(token); @@ -202,7 +210,7 @@ export async function openAccountMenu( userIds: storedAccounts.map((x) => x.id), }); - function createItem(account: misskey.entities.UserDetailed) { + function createItem(account: firefish.entities.UserDetailed) { return { type: "user", user: account, diff --git a/packages/client/src/components/MkAbuseReportWindow.vue b/packages/client/src/components/MkAbuseReportWindow.vue index ed473789..38397894 100644 --- a/packages/client/src/components/MkAbuseReportWindow.vue +++ b/packages/client/src/components/MkAbuseReportWindow.vue @@ -41,7 +41,7 @@ diff --git a/packages/client/src/components/MkDriveWindow.vue b/packages/client/src/components/MkDriveWindow.vue index 24daea97..f116b6e8 100644 --- a/packages/client/src/components/MkDriveWindow.vue +++ b/packages/client/src/components/MkDriveWindow.vue @@ -15,13 +15,13 @@ diff --git a/packages/client/src/components/MkNoteSub.vue b/packages/client/src/components/MkNoteSub.vue index 4cef7ba9..85479713 100644 --- a/packages/client/src/components/MkNoteSub.vue +++ b/packages/client/src/components/MkNoteSub.vue @@ -191,9 +191,8 @@ diff --git a/packages/client/src/pages/api-console.vue b/packages/client/src/pages/api-console.vue index b7a533c4..80d9a4d0 100644 --- a/packages/client/src/pages/api-console.vue +++ b/packages/client/src/pages/api-console.vue @@ -71,7 +71,8 @@ function send() { os.api( endpoint.value as keyof Endpoints, requestBody, - requestBody.i || (withCredential.value ? undefined : null), + null, + withCredential.value, ).then( (resp) => { sending.value = false; diff --git a/packages/client/src/pages/clip.vue b/packages/client/src/pages/clip.vue index e3af86e2..e5e0305e 100644 --- a/packages/client/src/pages/clip.vue +++ b/packages/client/src/pages/clip.vue @@ -29,7 +29,7 @@