Compare commits

..

42 Commits

Author SHA1 Message Date
syuilo
1217d6fbb4 Merge branch 'develop' 2023-01-22 05:40:56 +09:00
syuilo
ccb22539e1 13.1.2 2023-01-22 05:40:48 +09:00
syuilo
957eff0e63 fix(client): リアクションのカスタム絵文字が表示されないのを修正
Fix #9682
2023-01-22 05:39:33 +09:00
syuilo
363d727c55 refactor 2023-01-22 05:33:26 +09:00
syuilo
31dcf713cc Merge branch 'develop' 2023-01-22 04:28:55 +09:00
syuilo
7800a12e52 13.1.1 2023-01-22 04:28:43 +09:00
syuilo
d6ff50a30b New Crowdin updates (#9676)
* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

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

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Russian)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Russian)

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

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Russian)

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

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Russian)
2023-01-22 04:28:19 +09:00
syuilo
ead931211c fix(client): 実績解除リクエストの間隔をあけるように
Fix #9674
2023-01-22 04:24:38 +09:00
syuilo
a3aafa03ad update deps 2023-01-22 04:17:58 +09:00
syuilo
307a882649 tweak fetchCustomEmojis timing 2023-01-21 20:53:11 +09:00
syuilo
3e112da486 ローカルのカスタム絵文字については直接オリジナルURLにリクエストするように 2023-01-21 20:40:09 +09:00
syuilo
bd469420fa fix(client): クライアント起動時にも言語ファイルのチェックを行うように
Fix #9005
2023-01-21 20:24:15 +09:00
syuilo
38fde26d60 Merge branch 'develop' 2023-01-21 18:45:50 +09:00
syuilo
dc4fd3e505 13.1.0 2023-01-21 18:45:41 +09:00
syuilo
4dc00ee72a New translations ja-JP.yml (English) (#9673) 2023-01-21 18:41:53 +09:00
CyberRex
bd3d75df6b Update chokidar and use pnpm exec (#9640)
* Fix for dev mode

* Update packages/frontend/package.json

Co-authored-by: tamaina <tamaina@hotmail.co.jp>

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-01-21 18:41:30 +09:00
syuilo
69bb377cb1 13.1.0-beta.2 2023-01-21 17:02:44 +09:00
syuilo
80bfa02831 New Crowdin updates (#9666)
* New translations ja-JP.yml (Thai)

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

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

* New translations ja-JP.yml (Romanian)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Catalan)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Greek)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (Swedish)

* New translations ja-JP.yml (Ukrainian)

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

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (Bengali)

* New translations ja-JP.yml (Thai)

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

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

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (Korean)
2023-01-21 17:01:43 +09:00
syuilo
8631740ca4 fix(server): twitterと連携するときに autwh is not a function になるのを修正
Fix #9658
2023-01-21 17:01:02 +09:00
syuilo
4b75c68753 fix(client): The … button on notes does nothing when not logged in
Fix #9659
2023-01-21 16:59:58 +09:00
syuilo
3bf775c9a8 ユーザーの実績一覧を見れるように 2023-01-21 16:57:23 +09:00
syuilo
8dc0e0abbb Update ja-JP.yml 2023-01-21 16:08:42 +09:00
syuilo
2b377a3dc5 add some achievements 2023-01-21 16:06:49 +09:00
syuilo
9d367882fb add some achievements 2023-01-21 15:30:29 +09:00
syuilo
d56fc41865 Merge branch 'develop' 2023-01-16 15:21:43 +09:00
rinsuki
fcabc99303 masterブランチをmaster_securityとマージ (#9260)
* Fix: forkbomb 2

* 12.119.2

Co-authored-by: mei23 <m@m544.net>
2022-12-04 05:34:51 +09:00
syuilo
fccd9c32e8 12.119.1 2022-12-03 18:42:19 +09:00
syuilo
58a3a0b7d4 forkbomb DOS mitigation 2022-12-03 18:42:06 +09:00
syuilo
a2a1636c10 Merge branch 'develop' 2022-09-10 19:26:43 +09:00
syuilo
46ec0303b7 Merge branch 'develop' 2022-08-08 11:39:04 +09:00
syuilo
3b1669fb6b Merge branch 'develop' 2022-08-07 00:39:21 +09:00
syuilo
09591fa4ae Merge branch 'develop' 2022-07-19 17:22:32 +09:00
syuilo
85ce00adc0 Merge branch 'develop' 2022-07-18 05:07:12 +09:00
syuilo
f25518af91 Merge branch 'develop' 2022-07-17 05:35:36 +09:00
syuilo
b796aacf7f Merge branch 'develop' 2022-07-16 23:53:24 +09:00
syuilo
ff24811676 Merge branch 'develop' 2022-07-16 18:21:44 +09:00
syuilo
4c8a1867f0 Merge branch 'develop' 2022-07-15 22:45:13 +09:00
syuilo
bce48dfee9 Merge branch 'develop' 2022-07-13 21:59:47 +09:00
syuilo
c20311b8a7 Merge branch 'develop' 2022-07-09 18:32:55 +09:00
syuilo
fb14ac50b8 Merge branch 'develop' 2022-07-08 17:34:53 +09:00
syuilo
84d984bd31 Merge branch 'develop' 2022-07-07 21:23:03 +09:00
syuilo
1bc856c451 Merge pull request #8821 from misskey-dev/develop
Release: 12.111.1
2022-06-13 00:41:09 +09:00
49 changed files with 1819 additions and 221 deletions

View File

@@ -9,7 +9,21 @@
You should also include the user name that made the change.
-->
## 13.x.x (unreleased)
## 13.1.2 (2023/01/22)
### Bugfixes
- Client: リアクションのカスタム絵文字の表示の問題を修正
## 13.1.1 (2023/01/22)
### Improvements
- ローカルのカスタム絵文字を表示する際のパフォーマンスを改善
- Client: 瞬間的に大量の実績を解除した際の挙動を改善
### Bugfixes
- Client: アップデート時にローカリゼーションデータが更新されないことがあるのを修正
## 13.1.0 (2023/01/21)
### Improvements
- 実績機能
@@ -23,6 +37,8 @@ You should also include the user name that made the change.
### Bugfixes
- playを削除する手段がなかったのを修正
- The … button on notes does nothing when not logged in
- twitterと連携するときに autwh is not a function になるのを修正
## 13.0.0 (2023/01/16)

View File

@@ -108,6 +108,7 @@ clickToShow: "اضغط للعرض"
sensitive: "محتوى حساس"
add: "إضافة"
reaction: "التفاعلات"
reactions: "التفاعلات"
reactionSetting: "التفاعلات المراد عرضها في منتقي التفاعلات."
reactionSettingDescription2: "اسحب لترتيب ، انقر للحذف ، استخدم \"+\" للإضافة."
rememberNoteVisibility: "تذكر إعدادت مدى رؤية الملاحظات"

View File

@@ -107,6 +107,7 @@ clickToShow: "দেখার জন্য ক্লিক করুন"
sensitive: "সংবেদনশীল বিষয়বস্তু"
add: "যুক্ত করুন"
reaction: "প্রতিক্রিয়া"
reactions: "প্রতিক্রিয়া"
reactionSetting: "রিঅ্যাকশন পিকারে যেসকল প্রতিক্রিয়া দেখানো হবে"
reactionSettingDescription2: "পুনরায় সাজাতে টেনে আনুন, মুছতে ক্লিক করুন, যোগ করতে + টিপুন।"
rememberNoteVisibility: "নোটের দৃশ্যমান্যতার সেটিংস মনে রাখুন"

View File

@@ -108,6 +108,7 @@ clickToShow: "Fes clic per mostrar"
sensitive: "NSFW"
add: "Afegir"
reaction: "Reaccions"
reactions: "Reaccions"
reactionSetting: "Reaccions a mostrar al selector de reaccions"
reactionSettingDescription2: "Arrossega per reordenar, fes clic per suprimir, prem \"+\" per afegir."
rememberNoteVisibility: "Recorda la configuració de visibilitat de les notes"

View File

@@ -105,6 +105,7 @@ clickToShow: "Klikněte pro zobrazení"
sensitive: "NSFW"
add: "Přidat"
reaction: "Reakce"
reactions: "Reakce"
reactionSettingDescription2: "Přetažením změníte pořadí, kliknutím smažete, zmáčkněte \"+\" k přidání"
rememberNoteVisibility: "Zapamatovat nastavení zobrazení poznámky"
attachCancel: "Odstranit přílohu"

View File

@@ -110,6 +110,7 @@ clickToShow: "Zum Anzeigen anklicken"
sensitive: "NSFW"
add: "Hinzufügen"
reaction: "Reaktionen"
reactions: "Reaktionen"
reactionSetting: "In der Reaktionsauswahl anzuzeigende Reaktionen"
reactionSettingDescription2: "Ziehe um Anzuordnen, klicke um zu löschen, drücke „+“ um hinzuzufügen"
rememberNoteVisibility: "Notizsichtbarkeit merken"
@@ -937,6 +938,234 @@ cannotPerformTemporary: "Vorübergehend nicht verfügbar"
cannotPerformTemporaryDescription: "Diese Aktion ist wegen des Überschreitenes des Ausführungslimits temporär nicht verfügbar. Bitte versuche es nach einiger Zeit erneut."
preset: "Vorlage"
selectFromPresets: "Aus Vorlagen wählen"
achievements: "Errungenschaften"
_achievements:
earnedAt: "Freigeschaltet am"
_types:
_notes1:
title: "Hallo Misskey!"
description: "Sende deine erste Notiz"
flavor: "Hab eine schöne Zeit mit Misskey!"
_notes10:
title: "Ein paar Notizen"
description: "10 Notizen gesendet"
_notes100:
title: "Viele Notizen"
description: "100 Notizen gesendet"
_notes500:
title: "Überschüttet mit Notizen"
description: "500 Notizen gesendet"
_notes1000:
title: "Berg an Notizen"
description: "1.000 Notizen gesendet"
_notes5000:
title: "Überquellende Notizen"
description: "5.000 Notizen gesendet"
_notes10000:
title: "Supernotiz"
description: "10.000 Notizen gesendet"
_notes20000:
title: "Brauche... mehr... Notizen"
description: "20.000 Notizen gesendet"
_notes30000:
title: "Notizen, Notizen, Notizen"
description: "30.000 Notizen gesendet"
_notes40000:
title: "Notizfabrik"
description: "40.000 Notizen gesendet"
_notes50000:
title: "Planet der Notizen"
description: "50.000 Notizen gesendet"
_notes60000:
title: "Notizquasar"
description: "60.000 Notizen gesendet"
_notes70000:
title: "Schwarzes Notizloch"
description: "70.000 Notizen gesendet"
_notes80000:
title: "Notizgalaxie"
description: "80.000 Notizen gesendet"
_notes90000:
title: "Notizversum"
description: "90.000 Notizen gesendet"
_notes100000:
title: "ALL YOUR NOTE ARE BELONG TO US"
description: "100.000 Notizen gesendet"
flavor: "Du hast wirklich viel zu sagen."
_login3:
title: "Anfänger "
description: "An 3 Tagen eingeloggt"
flavor: "Nenn' mich ab heute Misskist"
_login7:
title: "Anfänger Ⅱ"
description: "An 7 Tagen eingeloggt"
flavor: "Na, eingewöht?"
_login15:
title: "Anfänger Ⅲ"
description: "An 15 Tagen eingeloggt"
_login30:
title: "Misskist "
description: "An 30 Tagen eingeloggt"
_login60:
title: "Misskist Ⅱ"
description: "An 60 Tagen eingeloggt"
_login100:
title: "Misskist Ⅲ"
description: "An 100 Tagen eingeloggt"
flavor: "Violent Misskist"
_login200:
title: "Stammbesucher "
description: "An 200 Tagen eingeloggt"
_login300:
title: "Stammbesucher Ⅱ"
description: "An 300 Tagen eingeloggt"
_login400:
title: "Stammbesucher Ⅲ"
description: "An 400 Tagen eingeloggt"
_login500:
title: "Veteran "
description: "An 500 Tagen eingeloggt"
flavor: "Meine Kameraden, ich liebe sie, die Notizen."
_login600:
title: "Veteran Ⅱ"
description: "An 600 Tagen eingeloggt"
_login700:
title: "Veteran Ⅲ"
description: "An 700 Tagen eingeloggt"
_login800:
title: "Meister der Notizen "
description: "An 800 Tagen eingeloggt"
_login900:
title: "Meister der Notizen Ⅱ"
description: "An 900 Tagen eingeloggt"
_login1000:
title: "Meister der Notizen Ⅲ"
description: "An 1000 Tagen eingeloggt"
flavor: "Danke, dass du Misskey nutzt!"
_noteClipped1:
title: "Muss... clippen..."
description: "Die erste Notiz geclippt"
_noteFavorited1:
title: "Sternengucker"
description: "Eine Notiz als Favorit markiert"
_profileFilled:
title: "Perfekte Vorbereitung"
description: "Fülle dein Profil aus"
_markedAsCat:
title: "Ich der Kater"
description: "Markiere dein Konto als Katze"
flavor: "Einen Namen bekommst du später. "
_following1:
title: "Das Folgen beginnt"
description: "Du folgst deiner ersten Person"
_following10:
title: "Folge ihnen... folge ihnen..."
description: "Du folgst über 10 Leuten"
_following50:
title: "Viele Freunde"
description: "Du folgst über 50 Leuten"
_following100:
title: "100 Freunde"
description: "Du folgst über 100 Leuten"
_following300:
title: "Freundeüberschuss"
description: "Du folgst über 300 Leuten"
_followers1:
title: "Der erste Follower"
description: "Du hast deinen ersten Follower erhalten"
_followers10:
title: "Mir nach!"
description: "Die Anzahl deiner Follower hat 10 überschritten"
_followers50:
title: "Wirrwarr"
description: "Die Anzahl deiner Follower hat 50 überschritten"
_followers100:
title: "Beliebt"
description: "Die Anzahl deiner Follower hat 100 überschritten"
_followers300:
title: "Stellt euch bitte in einer Reihe auf"
description: "Die Anzahl deiner Follower hat 300 überschritten"
_followers500:
title: "Funkmast"
description: "Die Anzahl deiner Follower hat 500 überschritten"
_followers1000:
title: "Influencer"
description: "Die Anzahl deiner Follower hat 1000 überschritten"
_collectAchievements30:
title: "Sammler der Errungenschaften"
description: "Schalte 30 Errungenschaften frei"
_viewAchievements3min:
title: "Fan von Errungenschaften"
description: "Schau dir die Liste deiner Errungenschaften für mindestens 3 Minuten an"
_iLoveMisskey:
title: "I Love Misskey"
description: "Sende \"I ❤ #Misskey\""
flavor: "Danke, dass du Misskey verwendest! - vom Entwicklerteam"
_client30min:
title: "Kleine Pause"
description: "Seit dem Öffnen deines Clients sind 30 Minuten vergangen"
_noteDeletedWithin1min:
title: "Ups"
description: "Lösche eine Notiz innerhalb von 1 Minute nachdem sie gesendet wurde"
_postedAtLateNight:
title: "Nachtaktiv"
description: "Sende mitten in der Nacht eine Notiz"
flavor: "Geh bald schlafen."
_postedAt0min0sec:
title: "Zeitansage"
description: "Sende um 00:00 eine Notiz"
flavor: "Klick Klick Klick Dooong"
_selfQuote:
title: "Selbstzitat"
description: "Zitiere eine eigene Notiz"
_htl20npm:
title: "Fließende Chronik"
description: "Deine Startseitenchronik erreicht eine Geschwindigkeit von 20 npm (Notizen pro Minute)"
_outputHelloWorldOnScratchpad:
title: "Hallo Welt!"
description: "Gib \"hello world\" in der Testumgebung aus"
_open3windows:
title: "Splitscreen"
description: "Habe zur gleichen Zeit mindestens 3 Fenster offen"
_driveFolderCircularReference:
title: "Zyklischer Verweis"
description: "Versuche, in Drive einen Zirkelbezug von Ordnern herzustellen"
_reactWithoutRead:
title: "Hast du das wirklich gelesen?"
description: "Reagiere auf eine Notiz mit mindestens 100 Zeichen innerhalb von 3 Sekunden der Erstellung der Notiz"
_clickedClickHere:
title: "Klicke hier"
description: "Du hast hier geklickt"
_justPlainLucky:
title: "Pures Glück"
description: "Kann alle 10 Sekunden mit einer Warscheinlichkeit von 0.01% erhalten werden"
_setNameToSyuilo:
title: "Gottkomplex"
description: "Setze deinen Namen auf \"syuilo\""
_passedSinceAccountCreated1:
title: "Einjahresjubiläum"
description: "Seit der Erstellung deines Kontos ist 1 Jahr vergangen"
_passedSinceAccountCreated2:
title: "Zweijahresjubiläum"
description: "Seit der Erstellung deines Kontos sind 2 Jahre vergangen"
_passedSinceAccountCreated3:
title: "Dreijahresjubiläum"
description: "Seit der Erstellung deines Kontos sind 3 Jahre vergangen"
_loggedInOnBirthday:
title: "Alles Gute Zum Geburtstag"
description: "Logge dich an deinem Geburtstag ein"
_loggedInOnNewYearsDay:
title: "Frohes Neujahr"
description: "Logge dich am Neujahrstag ein"
flavor: "Auf ein weiteres tolles Jahr in dieser Instanz"
_cookieClicked:
title: "Ein Spiel, in dem du auf einen Keks klickst"
description: "Den Keks geklickt"
flavor: "Bist du hier richtig?"
_brainDiver:
title: "Brain Diver"
description: "Sende den Link zu Brain Diver"
flavor: "Misskey-Misskey La-Tu-Ma"
_role:
new: "Rolle erstellen"
edit: "Rolle bearbeiten"
@@ -1586,6 +1815,7 @@ _notification:
pollEnded: "Umfrageergebnisse sind verfügbar"
unreadAntennaNote: "Antenne {name}"
emptyPushNotificationMessage: "Push-Benachrichtigungen wurden aktualisiert"
achievementEarned: "Errungenschaft freigeschaltet"
_types:
all: "Alle"
follow: "Neue Follower"

View File

@@ -103,6 +103,7 @@ you: "Εσύ"
clickToShow: "Κάντε κλικ για εμφάνιση"
add: "Προσθέστε"
reaction: "Αντιδράσεις"
reactions: "Αντιδράσεις"
reactionSetting: "Αντιδράσεις για εμφάνιση στην επιλογή αντίδρασης"
reactionSettingDescription2: "Σύρετε για να αλλάξετε τη σειρά, κάντε κλικ για να διαγράψετε, πατήστε \"+\" για να προσθέσετε."
rememberNoteVisibility: "Θυμήσου τις ρυθμίσεις ορατότητας σημειώματος"

View File

@@ -110,6 +110,7 @@ clickToShow: "Click to show"
sensitive: "NSFW"
add: "Add"
reaction: "Reactions"
reactions: "Reactions"
reactionSetting: "Reactions to show in the reaction picker"
reactionSettingDescription2: "Drag to reorder, click to delete, press \"+\" to add."
rememberNoteVisibility: "Remember note visibility settings"
@@ -937,6 +938,234 @@ cannotPerformTemporary: "Temporarily unavailable"
cannotPerformTemporaryDescription: "This action cannot be performed temporarily due to exceeding the execution limit. Please wait for a while and then try again."
preset: "Preset"
selectFromPresets: "Choose from presets"
achievements: "Achievements"
_achievements:
earnedAt: "Unlocked at"
_types:
_notes1:
title: "just setting up my msky"
description: "Post your first note"
flavor: "Have a good Misskey life!"
_notes10:
title: "Some notes"
description: "Post 10 notes"
_notes100:
title: "A lot of notes"
description: "Post 100 notes"
_notes500:
title: "Covered in notes"
description: "Post 500 notes"
_notes1000:
title: "A mountain of notes"
description: "Post 1,000 notes"
_notes5000:
title: "Overflowing notes"
description: "Post 5,000 notes"
_notes10000:
title: "Supernote"
description: "Post 10,000 notes"
_notes20000:
title: "Need... more... notes..."
description: "Post 20,000 notes"
_notes30000:
title: "Notes notes notes!"
description: "Post 30,000 notes"
_notes40000:
title: "Note factory"
description: "Post 40,000 notes"
_notes50000:
title: "Planet of notes"
description: "Post 50,000 notes"
_notes60000:
title: "Note quasar"
description: "Post 60,000 notes"
_notes70000:
title: "Note black hole"
description: "Post 70,000 notes"
_notes80000:
title: "Note galaxy"
description: "Post 80,000 notes"
_notes90000:
title: "Note universe"
description: "Post 90,000 notes"
_notes100000:
title: "ALL YOUR NOTE ARE BELONG TO US"
description: "Post 100,000 notes"
flavor: "You sure have a lot to say."
_login3:
title: "Beginner I"
description: "Log in for a total of 3 days"
flavor: "Starting today, just call me Misskist"
_login7:
title: "Beginner II"
description: "Log in for a total of 7 days"
flavor: "Feel like you've gotten the hang of things yet?"
_login15:
title: "Beginner III"
description: "Log in for a total of 15 days"
_login30:
title: "Misskist I"
description: "Log in for a total of 30 days"
_login60:
title: "Misskist II"
description: "Log in for a total of 60 days"
_login100:
title: "Misskist III"
description: "Log in for a total of 100 days"
flavor: "Violent Misskist"
_login200:
title: "Regular I"
description: "Log in for a total of 200 days"
_login300:
title: "Regular II"
description: "Log in for a total of 300 days"
_login400:
title: "Regular III"
description: "Log in for a total of 400 days"
_login500:
title: "Expert I"
description: "Log in for a total of 500 days"
flavor: "My friends, it has often been said that I like notes"
_login600:
title: "Expert II"
description: "Log in for a total of 600 days"
_login700:
title: "Expert III"
description: "Log in for a total of 700 days"
_login800:
title: "Master of Notes I"
description: "Log in for a total of 800 days"
_login900:
title: "Master of Notes II"
description: "Log in for a total of 900 days"
_login1000:
title: "Master of Notes III"
description: "Log in for a total of 1,000 days"
flavor: "Thank you for using Misskey!"
_noteClipped1:
title: "Must... clip..."
description: "Clip your first note"
_noteFavorited1:
title: "Stargazer"
description: "Favorite your first note"
_profileFilled:
title: "Well-prepared"
description: "Set up your profile"
_markedAsCat:
title: "I Am a Cat"
description: "Mark your account as a cat"
flavor: "I'll give you a name later."
_following1:
title: "Following your first user"
description: "Follow a user"
_following10:
title: "Keep up... keep up..."
description: "Follow 10 users"
_following50:
title: "Lots of friends"
description: "Follow 50 accounts"
_following100:
title: "100 Friends"
description: "Follow 100 accounts"
_following300:
title: "Friend overload"
description: "Follow 300 accounts"
_followers1:
title: "First follower"
description: "Gain 1 follower"
_followers10:
title: "Follow me!"
description: "Gain 10 followers"
_followers50:
title: "Coming in crowds"
description: "Gain 50 followers"
_followers100:
title: "Popular"
description: "Gain 100 followers"
_followers300:
title: "Please form a single line"
description: "Gain 300 followers"
_followers500:
title: "Radio Tower"
description: "Gain 500 followers"
_followers1000:
title: "Influencer"
description: "Gain 1,000 followers"
_collectAchievements30:
title: "Achievement Collector"
description: "Earn 30 achievements"
_viewAchievements3min:
title: "Likes Achievements"
description: "Look at your list of achievements for at least 3 minutes"
_iLoveMisskey:
title: "I Love Misskey"
description: "Post \"I ❤ #Misskey\""
flavor: "Misskey's development team greatly appreciates your support!"
_client30min:
title: "Short break"
description: "Spend 30 minutes on Misskey"
_noteDeletedWithin1min:
title: "Nevermind"
description: "Delete a note within a minute of posting it"
_postedAtLateNight:
title: "Nocturnal"
description: "Post a note late at night"
flavor: "It's about time to go to bed."
_postedAt0min0sec:
title: "Speaking Clock"
description: "Post a note at 00:00"
flavor: "Click Click Click Claaang"
_selfQuote:
title: "Self-Reference"
description: "Quote your own note"
_htl20npm:
title: "Flowing Timeline"
description: "Have the speed of your home timeline exceed 20 npm (notes per minute)"
_outputHelloWorldOnScratchpad:
title: "Hello, world!"
description: "Output \"hello world\" in the Scratchpad"
_open3windows:
title: "Multi-Window"
description: "Have at least 3 windows open at the same time"
_driveFolderCircularReference:
title: "Circular Reference"
description: "Attempt to create a recursively nested folder in Drive"
_reactWithoutRead:
title: "Did you really read that?"
description: "React on a note that's over 100 characters long within 3 seconds of it being posted"
_clickedClickHere:
title: "Click here"
description: "You've clicked here"
_justPlainLucky:
title: "Just Plain Lucky"
description: "Has a chance to be obtained with a probability of 0.01% every 10 seconds"
_setNameToSyuilo:
title: "God Complex"
description: "Set your name to \"syuilo\""
_passedSinceAccountCreated1:
title: "One Year Anniversary"
description: "One year has passed since your account was created"
_passedSinceAccountCreated2:
title: "Two Year Anniversary"
description: "Two years have passed since your account was created"
_passedSinceAccountCreated3:
title: "Three Year Anniversary"
description: "Three years have passed since your account was created"
_loggedInOnBirthday:
title: "Happy Birthday"
description: "Log in on your birthday"
_loggedInOnNewYearsDay:
title: "Happy New Year!"
description: "Logged in on the first day of the year"
flavor: "To another great year on this instance"
_cookieClicked:
title: "A game in which you click cookies"
description: "Clicked the cookie"
flavor: "Wait, are you on the correct website?"
_brainDiver:
title: "Brain Diver"
description: "Post the link to Brain Diver"
flavor: "Misskey-Misskey La-Tu-Ma"
_role:
new: "New role"
edit: "Edit role"
@@ -1586,6 +1815,7 @@ _notification:
pollEnded: "Poll results have become available"
unreadAntennaNote: "Antenna {name}"
emptyPushNotificationMessage: "Push notifications have been updated"
achievementEarned: "Achievement unlocked"
_types:
all: "All"
follow: "New followers"

View File

@@ -110,6 +110,7 @@ clickToShow: "Click para ver"
sensitive: "Marcado como sensible"
add: "Agregar"
reaction: "Reacción"
reactions: "Reacción"
reactionSetting: "Reacciones para mostrar en el menú de reacciones"
reactionSettingDescription2: "Arrastre para reordenar, click para borrar, apriete la tecla + para añadir."
rememberNoteVisibility: "Recordar visibilidad"

View File

@@ -110,6 +110,7 @@ clickToShow: "Cliquer pour afficher"
sensitive: "Contenu sensible"
add: "Ajouter"
reaction: "Réactions"
reactions: "Réactions"
reactionSetting: "Réactions à afficher dans le sélecteur de réactions"
reactionSettingDescription2: "Déplacer pour réorganiser, cliquer pour effacer, utiliser « + » pour ajouter."
rememberNoteVisibility: "Activer l'option \" se souvenir de la visibilité des notes \" vous permet de réutiliser automatiquement la visibilité utilisée lors de la publication de votre note précédente."

View File

@@ -109,6 +109,7 @@ clickToShow: "Klik untuk melihat"
sensitive: "Konten sensitif"
add: "Tambahkan"
reaction: "Reaksi"
reactions: "Reaksi"
reactionSetting: "Reaksi untuk dimunculkan di bilah reaksi"
reactionSettingDescription2: "Geser untuk memindah urutkan, klik untuk menghapus, tekan \"+\" untuk menambahkan"
rememberNoteVisibility: "Ingat pengaturan visibilitas catatan"

View File

@@ -110,6 +110,7 @@ clickToShow: "Clicca per visualizzare"
sensitive: "Contenuto sensibile"
add: "Aggiungi"
reaction: "Reazioni"
reactions: "Reazioni"
reactionSetting: "Reazioni visualizzate sul pannello"
reactionSettingDescription2: "Trascina per riorganizzare, clicca per cancellare, usa il pulsante \"+\" per aggiungere."
rememberNoteVisibility: "Ricordare le impostazioni di visibilità delle note"

View File

@@ -1095,6 +1095,9 @@ _achievements:
_collectAchievements30:
title: "実績コレクター"
description: "実績を30個以上獲得した"
_viewAchievements3min:
title: "実績好き"
description: "実績一覧を3分以上眺め続けた"
_iLoveMisskey:
title: "I Love Misskey"
description: "\"I ❤ #Misskey\"を投稿した"
@@ -1119,6 +1122,12 @@ _achievements:
_htl20npm:
title: "流れるTL"
description: "ホームタイムラインの流速が20npmを越す"
_outputHelloWorldOnScratchpad:
title: "Hello, world!"
description: "スクラッチパッドで hello world を出力した"
_open3windows:
title: "マルチウィンドウ"
description: "ウィンドウを3つ以上開いた状態にした"
_driveFolderCircularReference:
title: "循環参照"
description: "ドライブのフォルダを再帰的な入れ子にしようとした"
@@ -1146,6 +1155,10 @@ _achievements:
_loggedInOnBirthday:
title: "ハッピーバースデー"
description: "誕生日にログインした"
_loggedInOnNewYearsDay:
title: "あけましておめでとうございます"
description: "元日にログインした"
flavor: "今年も弊インスタンスをよろしくお願いします"
_cookieClicked:
title: "クッキーをクリックするゲーム"
description: "クッキーをクリックした"

View File

@@ -8,9 +8,9 @@ search: "探す"
notifications: "通知"
username: "ユーザー名"
password: "パスワード"
forgotPassword: "パスワード忘れて"
forgotPassword: "パスワード忘れてもうた"
fetchingAsApObject: "今ちと連合に照会しとるで"
ok: "OKや"
ok: "ええで"
gotIt: "ほい"
cancel: "やめとく"
noThankYou: "やめとく"
@@ -110,6 +110,7 @@ clickToShow: "押したら見えるで"
sensitive: "ちょっとアカンやつやで"
add: "増やす"
reaction: "リアクション"
reactions: "リアクション"
reactionSetting: "Reaction that will be displayed in Picker. "
reactionSettingDescription2: "ドラッグで並び替え、クリックで削除、+を押して追加やで。"
rememberNoteVisibility: "公開範囲覚えといて"
@@ -607,7 +608,7 @@ wordMute: "ワードミュート"
regexpError: "正規表現エラー"
regexpErrorDescription: "{tab}ワードミュートの{line}行目の正規表現にエラーが出てきたで:"
instanceMute: "インスタンスミュート"
userSaysSomething: "{name}が何か言ったようやで"
userSaysSomething: "{name}が何か言うとるわ"
makeActive: "使うで"
display: "表示"
copy: "コピー"

View File

@@ -110,6 +110,7 @@ clickToShow: "클릭하여 보기"
sensitive: "열람주의"
add: "추가"
reaction: "리액션"
reactions: "리액션"
reactionSetting: "선택기에 표시할 리액션"
reactionSettingDescription2: "끌어서 순서 변경, 클릭해서 삭제, +를 눌러서 추가할 수 있습니다."
rememberNoteVisibility: "공개 범위를 기억하기"
@@ -937,6 +938,234 @@ cannotPerformTemporary: "일시적으로 사용할 수 없음"
cannotPerformTemporaryDescription: "조작 횟수 제한을 초과하여 일시적으로 사용이 불가합니다. 잠시 후 다시 시도해 주세요."
preset: "프리셋"
selectFromPresets: "프리셋에서 선택"
achievements: "도전과제"
_achievements:
earnedAt: "달성 일시"
_types:
_notes1:
title: "미스키 설정하고 있었는데요"
description: "첫 노트를 포스트했습니다"
flavor: "Misskey에 오신 것을 환영합니다!"
_notes10:
title: "노트 조금"
description: "10개의 노트를 작성했습니다"
_notes100:
title: "노트 많이"
description: "100개의 노트를 작성했습니다"
_notes500:
title: "노트로 뒤덮여버렸어"
description: "500개의 노트를 작성했습니다"
_notes1000:
title: "노트만 산더미"
description: "1,000개의 노트를 작성했습니다"
_notes5000:
title: "노트가 어디서 솟아?"
description: "5,000개의 노트를 작성했습니다"
_notes10000:
title: "슈퍼-노트"
description: "10,000개의 노트를 작성했습니다"
_notes20000:
title: "노트 더 없어?"
description: "20,000개의 노트를 작성했습니다"
_notes30000:
title: "노트노트노트"
description: "30,000개의 노트를 작성했습니다"
_notes40000:
title: "노트 공장"
description: "40,000개의 노트를 작성했습니다"
_notes50000:
title: "노트 행성"
description: "50,000개의 노트를 작성했습니다"
_notes60000:
title: "노트 퀘이사"
description: "60,000개의 노트를 작성했습니다"
_notes70000:
title: "노트 블랙홀"
description: "70,000개의 노트를 작성했습니다"
_notes80000:
title: "노트 은하"
description: "80,000개의 노트를 작성했습니다"
_notes90000:
title: "노트 우주"
description: "90,000개의 노트를 작성했습니다"
_notes100000:
title: "네 모든 노트는 내 거야"
description: "100,000개의 노트를 작성했습니다"
flavor: "이만큼 쓸 일도 없겠지만... 다른 할 일이 있진 않으신가요?"
_login3:
title: "비기너 I"
description: "총 3일간 로그인했습니다"
flavor: "오늘부터 여러분도 미스키스트에요!"
_login7:
title: "비기너 II"
description: "총 7일간 로그인했습니다"
flavor: "슬슬 익숙해지셨나요?"
_login15:
title: "비기너 III"
description: "총 15일간 로그인했습니다"
_login30:
title: "미스키스트 I"
description: "총 30일간 로그인했습니다"
_login60:
title: "미스키스트 II"
description: "총 60일간 로그인했습니다"
_login100:
title: "미스키스트 III"
description: "총 100일간 로그인했습니다"
flavor: "그 유저, 미스키스트를 위하여"
_login200:
title: "단골 I"
description: "총 200일간 로그인했습니다"
_login300:
title: "단골 II"
description: "총 300일간 로그인했습니다"
_login400:
title: "단골 III"
description: "총 400일간 로그인했습니다"
_login500:
title: "베테랑 I"
description: "총 500일간 로그인했습니다"
flavor: "여러분, 저 이 노트들 좋아해요"
_login600:
title: "베테랑 II"
description: "총 600일간 로그인했습니다"
_login700:
title: "베테랑 III"
description: "총 700일간 로그인했습니다"
_login800:
title: "노트 마스터 I"
description: "총 800일간 로그인했습니다"
_login900:
title: "노트 마스터 II"
description: "총 900일간 로그인했습니다"
_login1000:
title: "노트 마스터 III"
description: "총 1,000일간 로그인했습니다"
flavor: "미스키를 사용해 주셔서 감사합니다!"
_noteClipped1:
title: "클립할 수밖에 없었어"
description: "처음으로 노트를 클립했습니다"
_noteFavorited1:
title: "별을 바라보는 자"
description: "처음으로 노트를 즐겨찾기했습니다"
_profileFilled:
title: "준비 완료"
description: "프로필 설정을 완료했습니다"
_markedAsCat:
title: "나는 고양이다냥!"
description: "계정을 고양이로 설정했습니다냥"
flavor: "냐냐냐냐냐냐아아아아앙!"
_following1:
title: "첫 팔로우"
description: "사용자를 처음으로 팔로우했습니다"
_following10:
title: "팔로우, 팔로우"
description: "10명의 사용자를 팔로우했습니다"
_following50:
title: "친구 잔뜩"
description: "50명의 사용자를 팔로우했습니다"
_following100:
title: "주소록 한 권으론 부족해"
description: "100명의 사용자를 팔로우했습니다"
_following300:
title: "친구가 넘쳐나"
description: "300명의 사용자를 팔로우했습니다"
_followers1:
title: "첫 팔로워"
description: "사용자가 처음으로 팔로잉했습니다"
_followers10:
title: "날 따라와!"
description: "10명의 사용자가 팔로우했습니다"
_followers50:
title: "이곳저곳"
description: "50명의 사용자가 팔로우했습니다"
_followers100:
title: "인기왕"
description: "100명의 사용자가 팔로우했습니다"
_followers300:
title: "줄 좀 서봐요"
description: "100명의 사용자가 팔로우했습니다"
_followers500:
title: "기지국"
description: "500명의 사용자가 팔로우했습니다"
_followers1000:
title: "유명인사"
description: "1,000명의 사용자가 팔로우했습니다"
_collectAchievements30:
title: "도전과제 콜렉터"
description: "30개의 도전과제를 획득했습니다"
_viewAchievements3min:
title: "저 도전과제 좋아해요"
description: "도전과제 목록을 3분 이상 보세요"
_iLoveMisskey:
title: "I Love Misskey"
description: "\"I ❤ #Misskey\"를 포스트했습니다"
flavor: "Misskey를 이용해주셔서 감사합니다! - 개발팀 일동"
_client30min:
title: "잠깐 쉬어"
description: "클라이언트를 시작하고 30분이 경과하였습니다"
_noteDeletedWithin1min:
title: "있었는데요 없었습니다"
description: "노트를 포스트한 후 1분 이내에 삭제했습니다"
_postedAtLateNight:
title: "올빼미"
description: "한밤중에 노트를 포스트했습니다"
flavor: "잠 좀 자세요. 걱정돼요."
_postedAt0min0sec:
title: "정각"
description: "1초도 어긋나지 않은 정각에 노트를 포스트했습니다"
flavor: "째깍 째깍 째깍 땡!"
_selfQuote:
title: "혼잣말"
description: "자기 노트를 인용했습니다"
_htl20npm:
title: "타임라인 폭주 중"
description: "1분 사이에 홈 타임라인에 노트가 20개 넘게 생성되었습니다"
_outputHelloWorldOnScratchpad:
title: "Hello, world!"
description: "스크래치패드에서 hello world를 출력하세요"
_open3windows:
title: "멀티 윈도우"
description: "3개 이상의 창을 여세요"
_driveFolderCircularReference:
title: "순환 참조"
description: "드라이브 폴더를 자신을 가리키도록 만드려 시도했습니다"
_reactWithoutRead:
title: "읽고 답하긴 하시는 건가요?"
description: "100자가 넘는 포스트에 3초 안에 포스트했습니다"
_clickedClickHere:
title: "여길 눌러보세요"
description: "이 곳을 눌러봤습니다"
_justPlainLucky:
title: "그냥 운이 좋았어"
description: "매 10초마다 0.01%의 확률로 달성됩니다"
_setNameToSyuilo:
title: "신 콤플렉스"
description: "이름을 syuilo로 설정했습니다"
_passedSinceAccountCreated1:
title: "1년"
description: "계정을 생성하고 1년이 지났습니다"
_passedSinceAccountCreated2:
title: "2년"
description: "계정을 생성하고 2년이 지났습니다"
_passedSinceAccountCreated3:
title: "3년"
description: "계정을 생성하고 3년이 지났습니다"
_loggedInOnBirthday:
title: "생일 축하합니다!"
description: "설정한 생일에 로그인했습니다"
_loggedInOnNewYearsDay:
title: "새해 복 많이 받으세요"
description: "새해 첫 날에 로그인했습니다"
flavor: "올해에도 저희 인스턴스에 관심을 가져 주셔서 감사합니다"
_cookieClicked:
title: "쿠키 클리커 게임"
description: "쿠키를 클릭했습니다"
flavor: "뭔가 문제가 있나요?"
_brainDiver:
title: "Brain Diver"
description: "Brain Diver로의 링크를 첨부했습니다"
flavor: "Misskey-Misskey La-Tu-Ma"
_role:
new: "새 역할 생성"
edit: "역할 수정"
@@ -1586,6 +1815,7 @@ _notification:
pollEnded: "투표 결과가 발표되었습니다"
unreadAntennaNote: "안테나 {name}"
emptyPushNotificationMessage: "푸시 알림이 갱신되었습니다"
achievementEarned: "도전 과제를 달성했습니다"
_types:
all: "전부"
follow: "팔로잉"

View File

@@ -109,6 +109,7 @@ clickToShow: "Klik om te bekijken"
sensitive: "NSFW"
add: "Toevoegen"
reaction: "Reacties"
reactions: "Reacties"
reactionSetting: "Reacties die in de reactie-selector worden getoond"
reactionSettingDescription2: "Sleep om opnieuw te ordenen, Klik om te verwijderen, Druk op \"+\" om toe te voegen"
rememberNoteVisibility: "Vergeet niet de notitie zichtbaarheidsinstellingen"

View File

@@ -110,6 +110,7 @@ clickToShow: "Kliknij, aby wyświetlić"
sensitive: "NSFW"
add: "Dodaj"
reaction: "Reakcja"
reactions: "Reakcja"
reactionSetting: "Reakcje do pokazania w wyborniku reakcji"
reactionSettingDescription2: "Przeciągnij aby zmienić kolejność, naciśnij aby usunąć, naciśnij „+” aby dodać"
rememberNoteVisibility: "Zapamiętuj ustawienia widoczności wpisu"

View File

@@ -107,6 +107,7 @@ clickToShow: "Clique para ver"
sensitive: "Conteúdo sensível"
add: "Adicionar"
reaction: "Reações"
reactions: "Reações"
reactionSetting: "Quais reações a mostrar no selecionador de reações"
reactionSettingDescription2: "Arraste para reordenar, clique para excluir, pressione + para adicionar."
rememberNoteVisibility: "Lembrar das configurações de visibilidade de notas"

View File

@@ -107,6 +107,7 @@ clickToShow: "Click pentru a afișa"
sensitive: "NSFW"
add: "Adaugă"
reaction: "Reacție"
reactions: "Reacție"
reactionSetting: "Reacții care să apară in selectorul de reacții"
reactionSettingDescription2: "Trage pentru a rearanja, apasă pe \"+\" pentru a adăuga."
rememberNoteVisibility: "Amintește setarea de vizibilitate a notelor"

View File

@@ -2,6 +2,7 @@
_lang_: "Русский"
headlineMisskey: "Сеть, сплетённая из заметок"
introMisskey: "Добро пожаловать! Misskey — это децентрализованный сервис микроблогов с открытым исходным кодом.\nПишите «заметки» — делитесь со всеми происходящим вокруг или рассказывайте о себе 📡\nСтавьте «реакции» — выражайте свои чувства и эмоции от заметок других 👍\nОткройте для себя новый мир 🚀"
poweredByMisskeyDescription: "{name} один из инстансов (также называемый экземпляром Misskey), использующий платформу с открытым исходным кодом <b>Misskey</b>."
monthAndDay: "{day}.{month}"
search: "Поиск"
notifications: "Уведомления"
@@ -12,6 +13,7 @@ fetchingAsApObject: "Приём с других сайтов"
ok: "Окей"
gotIt: "Ясно!"
cancel: "Отмена"
noThankYou: "Нет, спасибо"
enterUsername: "Введите имя пользователя"
renotedBy: "{user} делится"
noNotes: "Нет ни одной заметки"
@@ -47,6 +49,7 @@ deleteAndEdit: "Удалить и отредактировать"
deleteAndEditConfirm: "Удалить эту заметку и создать отредактированную? Все реакции, ссылки и ответы на существующую будут будут потеряны."
addToList: "Добавить в список"
sendMessage: "Отправить сообщение"
copyRSS: "Скопировать RSS"
copyUsername: "Скопировать имя пользователя"
searchUser: "Поиск людей"
reply: "Ответить"
@@ -107,6 +110,7 @@ clickToShow: "Нажмите для просмотра"
sensitive: "Содержимое не для всех"
add: "Добавить"
reaction: "Реакции"
reactions: "Реакции"
reactionSetting: "Реакции, отображаемые в палитре"
reactionSettingDescription2: "Расставляйте перетаскиванием, удаляйте нажатием, добавляйте кнопкой «+»."
rememberNoteVisibility: "Запоминать видимость заметок"
@@ -451,6 +455,7 @@ language: "Язык"
uiLanguage: "Язык интерфейса"
groupInvited: "Приглашение в группу"
aboutX: "Описание {x}"
emojiStyle: "Стиль эмодзи"
disableDrawer: "Не использовать выдвижные меню"
youHaveNoGroups: "У вас нет ни одной группы"
joinOrCreateGroup: "Получайте приглашения в группы или создавайте свои собственные"
@@ -708,6 +713,7 @@ accentColor: "Акцент"
textColor: "Текст"
saveAs: "Сохранить под названием…"
advanced: "Для продвинутых"
advancedSettings: "Расширенные настройки "
value: "Значения"
createdAt: "Создано"
updatedAt: "Обновлено"
@@ -839,34 +845,254 @@ numberOfColumn: "Количество столбцов"
searchByGoogle: "Поиск"
instanceDefaultLightTheme: "Светлая тема по умолчанию"
instanceDefaultDarkTheme: "Темная тема по умолчанию"
instanceDefaultThemeDescription: "Описание темы по умолчанию для инстанса"
mutePeriod: "Продолжительность скрытия"
indefinitely: "вечно"
tenMinutes: "10 минут"
oneHour: "1 час"
oneDay: "1 день"
oneWeek: "1 неделя"
reflectMayTakeTime: "Изменения могут занять время для отображения"
failedToFetchAccountInformation: "Не удалось получить информацию об аккаунте"
cropImage: "Кадрирование"
cropImageAsk: "Нужно ли кадрировать изображение?"
file: "Файлы"
recentNHours: "Последние {n} ч"
recentNDays: "Последние {n} сут"
noEmailServerWarning: "Почтовый сервер не установлен "
thereIsUnresolvedAbuseReportWarning: "Остались нерешённые жалобы"
recommended: "Рекомендуем"
check: "Проверить"
driveCapOverrideLabel: "Изменение лимита дискового пространства для этого пользователя"
driveCapOverrideCaption: "Укажите меньше или равное нулю для отмены"
requireAdminForView: "Для просмотра необходимо иметь аккаунт администратора"
isSystemAccount: "Данная учётная запись создана автоматически и управляется системой"
typeToConfirm: "Введите {x} для продолжения"
deleteAccount: "Удаление учётной записи"
document: "Документ"
numberOfPageCache: "Количество сохранённых страниц в кэше"
numberOfPageCacheDescription: "Описание количества страниц в кэше"
logoutConfirm: "Вы хотите выйти из аккаунта?"
lastActiveDate: "Последняя дата использования"
statusbar: "Статусбар"
pleaseSelect: "Пожалуйста, выберите"
reverse: "Переворот"
colored: "Выделена цветом"
refreshInterval: "Интервал перезагрузки"
label: "Метка"
type: "Тип"
speed: "Скорость"
sensitiveMediaDetection: "Определение содержимого деликатного характера"
localOnly: "Локально"
remoteOnly: "Только удалённо"
failedToUpload: "Сбой выгрузки"
cannotUploadBecauseInappropriate: "Файл не может быть загружен, так как было установлено, что он может содержать неприемлемое содержимое."
cannotUploadBecauseNoFreeSpace: "Файл не может быть загружен, так как не осталось места на диске"
beta: "Бета"
enableAutoSensitive: "Автоматическое определение NSFW"
enableAutoSensitiveDescription: "Если доступно, используйте машинное обучение для автоматической установки флага NSFW на носителе. Даже если эта функция отключена, она может быть установлена ​​автоматически в зависимости от инстанта."
account: "Учётные записи"
windowMaximize: "Развернуть"
windowRestore: "Восстановить"
loggedInAsBot: "Вы под аккаунтом бота!"
like: "Нравится!"
unlike: "Отменить «нравится»"
show: "Отображение"
pleaseDonate: "Сайт {host} работает на Misskey. Это бесплатное программное обеспечение, и ваши пожертвования очень бы помогли продолжать его разработку!"
color: "Цвет"
_achievements:
_types:
_notes1:
title: "Первые шаги в Misskey"
description: "Опубликована первая заметка"
_notes10:
title: "Несколько заметок"
description: "Опубликовано 10 заметок"
_notes100:
title: "Много заметок"
description: "Опубликовано 100 заметок"
_notes500:
title: "Всё в заметках"
description: "Опубликовано 500 заметок"
_notes1000:
title: "Гора заметок"
description: "Опубликовано 1000 заметок"
_notes5000:
title: "Заметки льются рекой"
description: "Опубликовано 5000 заметок"
_notes10000:
title: "Превосходство в заметках"
description: "Опубликовано 10000 заметок"
_notes20000:
title: "Нужно больше заметок!"
description: "Опубликовано 20000 заметок"
_notes30000:
title: "Заметки, заметки, заметки"
description: "Опубликовано 30000 заметок"
_notes40000:
title: "Фабрика заметок"
description: "Опубликовано 40000 заметок"
_notes50000:
title: "Планета заметок"
description: "Опубликовано 50000 заметок"
_notes60000:
title: "Замет-квазар"
description: "Опубликовано 60000 заметок"
_notes70000:
title: "Чёрная дыра из заметок"
description: "Опубликовано 70000 заметок"
_notes80000:
title: "Галактика заметок"
description: "Опубликовано 80000 заметок"
_notes90000:
title: "Вселенная заметок"
description: "Опубликовано 90000 заметок"
_notes100000:
title: "ALL YOUR NOTE ARE BELONG TO US"
description: "Опубликовано 100000 заметок"
_login3:
title: "Новичок "
description: "3 дня на сайте"
_login7:
title: "Новичок Ⅱ"
description: "Неделя на сайте"
flavor: "Кажется, вы начали свыкаться с этим, нет?"
_login15:
title: "Новичок Ⅲ"
description: "15 дней на сайте"
_login30:
title: "Мискиец "
description: "30 дней на сайте"
_login60:
title: "Мискиец Ⅱ"
description: "60 дней на сайте"
_login100:
title: "Мискиец Ⅲ"
description: "100 дней на сайте"
_login200:
title: "Завсегдатай "
description: "200 дней на сайте"
_login300:
title: "Завсегдатай Ⅱ"
description: "300 дней на сайте"
_login400:
title: "Завсегдатай Ⅲ"
description: "400 дней на сайте"
_login500:
title: "Ветеран "
description: "500 дней на сайте"
_login600:
title: "Ветеран Ⅱ"
description: "600 дней на сайте"
_login700:
title: "Ветеран Ⅲ"
description: "700 дней на сайте"
_login800:
title: "Повелитель заметок "
description: "800 дней на сайте"
_login900:
title: "Повелитель заметок Ⅱ"
description: "900 дней на сайте"
_login1000:
title: "Повелитель заметок Ⅲ"
description: "1000 дней на сайте"
_noteClipped1:
title: "Нельзя не сохранить"
description: "Первая заметка в подборке"
_noteFavorited1:
title: "Смотрящий на звёзды"
description: "Первое добавление в избранное"
_profileFilled:
title: "Приготовления закончены"
description: "Заполнен профиль"
_markedAsCat:
description: "Включена опция «Аккаунт кота»"
_followers50:
title: "Один за другим"
description: "Подписчиков больше 50"
_followers100:
title: "Всеобщий любимец"
description: "Подписчиков больше 100"
_followers300:
title: "В очередь!"
description: "Подписчиков больше 300"
_followers500:
title: "Радиостанция"
description: "Подписчиков больше 300"
_followers1000:
title: "Авторитет"
description: "Подписчиков больше 1000"
_collectAchievements30:
title: "Достигатор"
description: "Получено 30 достижений"
_viewAchievements3min:
title: "Любовь к успехам"
description: "Более 3 минут любования достижениями"
_iLoveMisskey:
title: "Я люблю Misskey"
description: "Написана заметка «I ❤ #Misskey»"
_client30min:
title: "Перерыв на обед"
description: "Прошло 30 минут с момента запуска клиента"
_noteDeletedWithin1min:
title: "Ой, нет!"
description: "Заметка удалена через минуту после публикации"
_postedAtLateNight:
title: "Житель ночи"
description: "Заметка опубликована в глухую ночь"
_postedAt0min0sec:
title: "Говорящие часы"
description: "Заметка опубликована ровно в 0 минут 0 секунд"
flavor: "Дин-дон дин-дон"
_selfQuote:
title: "Самовоспроизведение"
description: "Процитирована собственная заметка"
_htl20npm:
title: "В потоке"
description: "Достигнута скорость домашней ленты в 20 з/мин (заметок минуту)"
_outputHelloWorldOnScratchpad:
title: "Привет, мир!"
description: "Выведен текст «hello world» в Когтеточке"
_open3windows:
title: "Многооконный"
description: "Открыто одновременно 3 окна"
_driveFolderCircularReference:
description: "Попытка создать на «диске» рекурсивно вложенную папку"
_reactWithoutRead:
title: "Не читай @ отвечай!"
description: "На заметку более чем 100 знаков написан ответ в первые же 3 секунды с её появления."
_clickedClickHere:
title: "Нажмите здесь"
description: "Нажато здесь"
_justPlainLucky:
title: "Чистая удача"
description: "Может достаться с вероятностью 0,01% каждые 10 секунд."
_setNameToSyuilo:
title: "Комплекс бога"
description: "Установлено «syuilo» в качестве имени"
_passedSinceAccountCreated1:
title: "Первая годовщина"
description: "Прошёл 1 год с момента регистрации"
_passedSinceAccountCreated2:
title: "Вторая годовщина"
description: "Прошло 2 года с момента регистрации"
_passedSinceAccountCreated3:
title: "Третья годовщина"
description: "Прошло 3 года с момента регистрации"
_loggedInOnBirthday:
title: "С днём рождения!"
description: "Вход на сайт в свой день рождения"
_loggedInOnNewYearsDay:
title: "С Новым годом!"
description: "Вход на сайт в первый день года"
_cookieClicked:
title: "Игра, в которой вы щёлкаете по печенькам"
description: "Нажато печенье"
flavor: "Стоп, вы вообще на том сайте-то?"
_brainDiver:
title: "Brain Diver"
description: "Опубликована ссылка на песню «Brain Diver»"
flavor: "Мисски-Мисски Ла-Ту-Ма"
_role:
priority: "Приоритет"
_priority:

View File

@@ -110,6 +110,7 @@ clickToShow: "Kliknutím zobrazíte"
sensitive: "NSFW"
add: "Pridať"
reaction: "Reakcie"
reactions: "Reakcie"
reactionSetting: "Reakcie zobrazené vo výbere reakcií"
reactionSettingDescription2: "Ťahaním preusporiadate, kliknutím odstránite, Stlačením \"+\" pridáte"
rememberNoteVisibility: "Zapamätať nastavenia viditeľnosti poznámky"

View File

@@ -110,6 +110,7 @@ clickToShow: "Klicka för att visa"
sensitive: "Känsligt innehåll"
add: "Lägg till"
reaction: "Reaktioner"
reactions: "Reaktioner"
reactionSetting: "Reaktioner som ska visas i reaktionsväljaren"
reactionSettingDescription2: "Dra för att omordna, klicka för att radera, tryck \"+\" för att lägga till."
rememberNoteVisibility: "Komihåg notvisningsinställningar"

View File

@@ -110,6 +110,7 @@ clickToShow: "คลิกเพื่อแสดง"
sensitive: "เนื้อหาที่ละเอียดอ่อน NSFW"
add: "เพิ่ม"
reaction: "รีแอคชั่น"
reactions: "รีแอคชั่น"
reactionSetting: "รีแอคชั่นไปยังแสดงผลในตัวเลือกการรีแอคชั่น"
reactionSettingDescription2: "กดลากเพื่อจัดลำดับใหม่ กดคลิกเพื่อลบ กด \"+\" เพื่อเพิ่ม"
rememberNoteVisibility: "จดจำการตั้งค่าการมองเห็นตัวโน้ต"
@@ -932,6 +933,23 @@ assign: "กำหนด"
unassign: "ยังไม่มอบหมาย"
color: "สี"
manageCustomEmojis: "จัดการอีโมจิแบบกำหนดเอง"
youCannotCreateAnymore: "คุณถึงขีดจํากัดการสร้างแล้วนะ"
cannotPerformTemporary: "ไม่สามารถใช้การได้ชั่วคราว"
cannotPerformTemporaryDescription: "การดําเนินการนี้ไม่สามารถดําเนินการได้ชั่วคราว เนื่องจากเกินขีดจํากัดการดําเนินการ กรุณารอสักครู่แล้วลองใหม่อีกครั้งนะค่ะ"
preset: "พรีเซ็ต"
selectFromPresets: "เลือกจากการพรีเซ็ต"
achievements: "ความสำเร็จ"
_achievements:
earnedAt: "ได้รับเมื่อ"
_types:
_followers100:
title: "บุคคลที่เป็นที่นิยม"
_followers500:
title: "เสาสัญญาณ"
_iLoveMisskey:
title: "ฉันรัก Misskey"
_driveFolderCircularReference:
title: "อ้างอิงวงจร"
_role:
new: "บทบาทใหม่"
edit: "แก้ไขบทบาท"
@@ -948,6 +966,7 @@ _role:
isPublic: "บทบาทสาธารณะ"
descriptionOfIsPublic: "ทุกคนสามารถดูได้ว่าผู้ใช้งานนั้นได้รับมอบหมายบทบาทด้วยหรือไม่ \n\nบทบาทจะแสดงในโปรไฟล์ของผู้ใช้ด้วย"
options: "ตัวเลือกบทบาท"
policies: "นโยบาย"
baseRole: "บทบาทพื้นฐาน"
useBaseValue: "ใช้บทบาทพื้นฐานเริ่มต้น"
chooseRoleToAssign: "เลือกบทบาทที่ต้องการกำหนด"
@@ -965,7 +984,17 @@ _role:
canInvite: "สร้างรหัสเชิญอินสแตนซ์"
canManageCustomEmojis: "จัดการอีโมจิแบบกำหนดเอง"
driveCapacity: "ความจุของไดรฟ์"
pinMax: "จํานวนสูงสุดของโน้ตที่ปักหมุดไว้"
antennaMax: "จำนวนสูงสุดของเสาอากาศ"
wordMuteMax: "จำนวนอักขระสูงสุดที่อนุญาตในการปิดเสียงคำ"
webhookMax: "จำนวนเว็บฮุคสูงสุด"
clipMax: "จำนวนคลิปสูงสุด"
noteEachClipsMax: "จำนวนโน้ตสูงสุดภายในคลิป"
userListMax: "จำนวนรายชื่อผู้ใช้สูงสุด"
userEachUserListsMax: "จำนวนผู้ใช้สูงสุดภายในรายการผู้ใช้"
rateLimitFactor: "ขีดจำกัดอัตรา"
descriptionOfRateLimitFactor: "ขีดจํากัดอัตราที่ต่ำกว่ามีข้อจํากัดน้อยกว่าข้อจํากัดที่สูงกว่า"
canHideAds: "ซ่อนโฆษณา"
_condition:
isLocal: "ผู้ใช้ภายใน"
isRemote: "ผู้ใช้ระยะไกล"
@@ -1570,6 +1599,7 @@ _notification:
pollEnded: "โพลสำรวจความคิดเห็นผลลัพธ์มีพร้อมใช้งาน"
unreadAntennaNote: "เสาอากาศ {name}"
emptyPushNotificationMessage: "การแจ้งเตือนแบบพุชได้รับการอัพเดทแล้ว"
achievementEarned: "รับความสำเร็จ"
_types:
all: "ทั้งหมด"
follow: "กำลังติดตาม"

View File

@@ -109,6 +109,7 @@ clickToShow: "Натисніть для перегляду"
sensitive: "NSFW"
add: "Додати"
reaction: "Реакції"
reactions: "Реакції"
reactionSetting: "Налаштування реакцій"
reactionSettingDescription2: "Перемістити щоб змінити порядок, Клацнути мишою щоб видалити, Натиснути \"+\" щоб додати."
rememberNoteVisibility: "Пам’ятати параметри видимісті"

View File

@@ -107,6 +107,7 @@ clickToShow: "Nhấn để xem"
sensitive: "Nhạy cảm"
add: "Thêm"
reaction: "Biểu cảm"
reactions: "Biểu cảm"
reactionSetting: "Chọn những biểu cảm hiển thị"
reactionSettingDescription2: "Kéo để sắp xếp, nhấn để xóa, nhấn \"+\" để thêm."
rememberNoteVisibility: "Lưu kiểu tút mặc định"

View File

@@ -110,6 +110,7 @@ clickToShow: "点击以显示"
sensitive: "敏感内容"
add: "添加"
reaction: "回应"
reactions: "回应"
reactionSetting: "在选择器中显示的回应"
reactionSettingDescription2: "拖动重新排序,单击删除,点击 + 添加。"
rememberNoteVisibility: "保存上次设置的可见性"
@@ -937,6 +938,82 @@ cannotPerformTemporary: "暂时不可用"
cannotPerformTemporaryDescription: "因操作过于频繁,暂时不可用,请稍后再试。"
preset: "預設值"
selectFromPresets: "從預設值中選擇"
achievements: "成就"
_achievements:
earnedAt: "达成时间"
_types:
_notes1:
title: "初来乍到"
description: "第一次发帖"
flavor: "祝您在Misskey玩的愉快"
_notes10:
title: "一些帖子"
description: "发布了10篇帖子"
_notes100:
title: "很多帖子"
description: "发布了100篇帖子"
_notes500:
title: "满是帖子"
description: "发布了500篇帖子"
_notes1000:
title: "帖子成山"
description: "发布了1,000篇帖子"
_notes5000:
title: "帖如泉涌"
description: "发布了5,000篇帖子"
_notes10000:
title: "超级帖"
description: "发布了10,000篇帖子"
_notes20000:
title: "还想要更多帖子"
description: "发布了20,000篇帖子"
_notes30000:
title: "帖子帖子帖子"
description: "发布了30,000篇帖子"
_notes40000:
title: "帖子工厂"
description: "发布了40,000篇帖子"
_notes50000:
title: "帖子星球"
description: "发布了50,000篇帖子"
_notes60000:
title: "帖子类星体"
description: "发布了60,000篇帖子"
_notes70000:
title: "帖子黑洞"
description: "发布了70,000篇帖子"
_notes80000:
title: "帖子星系"
description: "发布了80,000篇帖子"
_notes90000:
title: "帖子起源"
description: "发布了90,000篇帖子"
_notes100000:
title: "ALL YOUR NOTE ARE BELONG TO US"
description: "发布了100,000篇帖子"
flavor: "真的有那么多可以写的东西吗?"
_login1000:
flavor: "感谢您使用Misskey"
_noteFavorited1:
title: "观星者"
_markedAsCat:
title: "我是猫"
_following50:
title: "我的朋友很多"
_viewAchievements3min:
description: "盯着成就看三分钟"
_iLoveMisskey:
title: "I Love Misskey"
description: "发布\"I ❤ #Misskey\"帖子"
flavor: "感谢您使用 Misskey by 开发团队"
_outputHelloWorldOnScratchpad:
title: "Hello, world!"
_loggedInOnBirthday:
title: "生日快乐"
description: "在生日当天登录"
_loggedInOnNewYearsDay:
title: "恭贺新禧"
description: "在元旦登入"
_role:
new: "创建角色"
edit: "编辑角色"
@@ -1586,6 +1663,7 @@ _notification:
pollEnded: "问卷调查结果已生成。"
unreadAntennaNote: "天线 {name}"
emptyPushNotificationMessage: "推送通知已更新"
achievementEarned: "获得成就"
_types:
all: "全部"
follow: "关注中"

View File

@@ -110,6 +110,7 @@ clickToShow: "按一下以顯示"
sensitive: "敏感內容"
add: "新增"
reaction: "情感"
reactions: "情感"
reactionSetting: "在選擇器中顯示反應"
reactionSettingDescription2: "拖動以重新列序,點擊以刪除,按下 + 添加。"
rememberNoteVisibility: "記住貼文可見性"
@@ -937,6 +938,166 @@ cannotPerformTemporary: "暫時無法進行"
cannotPerformTemporaryDescription: "由於超過操作次數限制,暫時無法進行。請過一段時間之後再嘗試。"
preset: "預設值"
selectFromPresets: "從預設值中選擇"
achievements: "成就"
_achievements:
earnedAt: "獲得日期"
_types:
_notes1:
title: "just setting up my msky"
description: "發出了第一則貼文"
flavor: "祝您的Misskey生活愉快"
_notes10:
title: "若干貼文"
description: "發表了10則貼文"
_notes100:
title: "許多的貼文"
description: "發表了100則貼文"
_notes500:
title: "滿滿的貼文"
description: "發表了500則貼文"
_notes1000:
title: "一堆貼文"
description: "發表了1000則貼文"
_notes5000:
title: "滔滔不絕的貼文"
description: "發表了5000則貼文"
_notes10000:
title: "超級貼文"
description: "發表了10000則貼文"
_notes20000:
title: "需要更多的貼文"
description: "發表了20000則貼文"
_notes30000:
title: "貼文貼文貼文"
description: "發表了30000則貼文"
_notes40000:
title: "貼文工廠"
description: "發表了40000則貼文"
_notes50000:
title: "貼文星球"
description: "發表了50000則貼文"
_notes60000:
title: "貼文類星體"
description: "發表了60000則貼文"
_notes70000:
title: "貼文黑洞"
description: "發表了70000則貼文"
_notes80000:
title: "貼文銀河"
description: "發表了80000則貼文"
_notes90000:
title: "貼文宇宙"
description: "發表了90000則貼文"
_notes100000:
title: "ALL YOUR NOTE ARE BELONG TO US"
description: "發表了100,000則貼文"
flavor: "有這麼多東西要寫嗎?"
_login3:
title: "初學者Ⅰ"
description: "總登入天數為3天"
flavor: "從今天開始我就是Misskeyist"
_login7:
title: "初學者ⅠⅠ"
description: "總登入天數為7天"
flavor: "您開始習慣了嗎?"
_login15:
title: "初學者III"
description: "總登入天數為15天"
_login30:
title: "Misskeyist "
description: "總登入天數為30天"
_login60:
title: "Misskeyist "
description: "總登入天數為60天"
_login100:
title: "Misskeyist "
description: "總登入天數為100天"
flavor: "辣個 Misskeyist 用戶"
_login200:
title: "普通Ⅰ"
description: "總登入天數為200天"
_login300:
title: "普通I"
description: "總登入天數為300天"
_login400:
title: "普通II"
description: "總登入天數為400天"
_login500:
title: "老兵Ⅰ"
description: "總登入天數為500天"
flavor: "諸君,我喜歡貼文"
_login600:
title: "老兵ⅠⅠ"
description: "總登入天數為600天"
_login700:
title: "老兵ⅠⅠⅠ"
description: "總登入天數為700天"
_login800:
title: "貼文大師Ⅰ"
description: "總登入天數為800天"
_login900:
title: "貼文大師ⅠⅠ"
description: "總登入天數為900天"
_login1000:
title: "貼文大師ⅠⅠⅠ"
description: "總登入天數為1,000天"
flavor: "感謝您使用Misskey"
_followers500:
title: "基站"
description: "超過500名追隨者"
_followers1000:
title: "影響者"
description: "超過1000名追隨者"
_collectAchievements30:
title: "成就收藏家"
description: "獲得30個以上的成就"
_viewAchievements3min:
title: "喜愛成就"
description: "看成就列表要花了3分鐘以上"
_iLoveMisskey:
title: "I Love Misskey"
description: "發布「I ❤ #Misskey」"
flavor: "感謝您使用Misskey by 開發團隊"
_client30min:
title: "休息一下"
description: "用戶端啟動已超過30分鐘"
_noteDeletedWithin1min:
title: "現在沒有"
description: "發文後1分鐘內刪文"
_postedAtLateNight:
title: "夜行性"
description: "在深夜發佈貼文"
flavor: "該去睡覺了。"
_postedAt0min0sec:
title: "報時"
description: "在0分0秒發佈貼文"
_selfQuote:
title: "自我引用"
description: "引用了自己的貼文"
_htl20npm:
title: "流動的TL"
description: "在首頁時間軸的流速超過20npm"
_outputHelloWorldOnScratchpad:
title: "Hello world!"
description: "在暫存記憶體輸出了 hello world"
_open3windows:
title: "多重視窗"
description: "開啟3個以上的視窗"
_driveFolderCircularReference:
title: "循環引用"
description: "試圖遞迴套入雲端硬碟資料夾"
_reactWithoutRead:
title: "有好好讀過嗎?"
description: "對包含100字以上內容的貼文做出情感反應"
_clickedClickHere:
title: "點擊這裡"
description: "已點擊這裡了"
_justPlainLucky:
title: "只是運氣好"
description: "每10秒有0.01%的機率獲得"
_setNameToSyuilo:
title: "神的情結"
description: "將名稱設定為 syuilo"
_role:
new: "建立角色"
edit: "編輯角色"

View File

@@ -1,6 +1,6 @@
{
"name": "misskey",
"version": "13.0.0",
"version": "13.1.2",
"codename": "nasubi",
"repository": {
"type": "git",
@@ -38,7 +38,7 @@
"cleanall": "pnpm clean-all"
},
"resolutions": {
"chokidar": "^3.3.1",
"chokidar": "^3.5.3",
"lodash": "^4.17.21"
},
"dependencies": {
@@ -54,11 +54,11 @@
"devDependencies": {
"@types/gulp": "4.0.10",
"@types/gulp-rename": "2.0.1",
"@typescript-eslint/eslint-plugin": "5.48.1",
"@typescript-eslint/parser": "5.48.1",
"@typescript-eslint/eslint-plugin": "5.48.2",
"@typescript-eslint/parser": "5.48.2",
"cross-env": "7.0.3",
"cypress": "12.3.0",
"eslint": "^8.31.0",
"eslint": "^8.32.0",
"start-server-and-test": "1.15.2"
},
"optionalDependencies": {

View File

@@ -58,9 +58,9 @@
"date-fns": "2.29.3",
"deep-email-validator": "0.1.21",
"escape-regexp": "0.0.1",
"fastify": "4.11.0",
"fastify": "4.12.0",
"feed": "4.2.2",
"file-type": "18.1.0",
"file-type": "18.2.0",
"fluent-ffmpeg": "2.1.2",
"form-data": "^4.0.0",
"got": "12.5.3",
@@ -89,7 +89,7 @@
"probe-image-size": "7.2.3",
"promise-limit": "2.7.0",
"pug": "3.0.2",
"punycode": "2.2.0",
"punycode": "2.3.0",
"pureimage": "0.3.15",
"qrcode": "1.5.1",
"random-seed": "0.3.0",
@@ -120,7 +120,7 @@
"typeorm": "0.3.11",
"typescript": "4.9.4",
"ulid": "2.3.0",
"undici": "^5.15.0",
"undici": "^5.15.1",
"unzipper": "0.10.11",
"uuid": "9.0.0",
"vary": "1.1.2",
@@ -132,7 +132,7 @@
"devDependencies": {
"@redocly/openapi-core": "1.0.0-beta.120",
"@swc/cli": "^0.1.59",
"@swc/core": "1.3.26",
"@swc/core": "1.3.27",
"@swc/jest": "0.2.24",
"@types/accepts": "1.3.5",
"@types/archiver": "5.3.1",
@@ -144,7 +144,7 @@
"@types/escape-regexp": "0.0.1",
"@types/fluent-ffmpeg": "2.1.20",
"@types/ioredis": "4.28.10",
"@types/jest": "29.2.5",
"@types/jest": "29.2.6",
"@types/js-yaml": "4.0.5",
"@types/jsdom": "20.0.1",
"@types/jsonld": "1.5.8",
@@ -176,11 +176,11 @@
"@types/web-push": "3.3.2",
"@types/websocket": "1.0.5",
"@types/ws": "8.5.4",
"@typescript-eslint/eslint-plugin": "5.48.1",
"@typescript-eslint/parser": "5.48.1",
"@typescript-eslint/eslint-plugin": "5.48.2",
"@typescript-eslint/parser": "5.48.2",
"cross-env": "7.0.3",
"eslint": "8.31.0",
"eslint-plugin-import": "2.27.4",
"eslint": "8.32.0",
"eslint-plugin-import": "2.27.5",
"execa": "6.1.0",
"jest": "29.3.1",
"jest-mock": "^29.3.1",

View File

@@ -41,6 +41,7 @@ const ACHIEVEMENT_TYPES = [
'passedSinceAccountCreated2',
'passedSinceAccountCreated3',
'loggedInOnBirthday',
'loggedInOnNewYearsDay',
'noteClipped1',
'noteFavorited1',
'profileFilled',
@@ -58,6 +59,7 @@ const ACHIEVEMENT_TYPES = [
'followers500',
'followers1000',
'collectAchievements30',
'viewAchievements3min',
'iLoveMisskey',
'client30min',
'noteDeletedWithin1min',
@@ -65,6 +67,8 @@ const ACHIEVEMENT_TYPES = [
'postedAt0min0sec',
'selfQuote',
'htl20npm',
'outputHelloWorldOnScratchpad',
'open3windows',
'driveFolderCircularReference',
'reactWithoutRead',
'clickedClickHere',

View File

@@ -22,7 +22,7 @@ export class EmojiEntityService {
@bindThis
public async pack(
src: Emoji['id'] | Emoji,
opts: { omitHost?: boolean; omitId?: boolean; } = {},
opts: { omitHost?: boolean; omitId?: boolean; withUrl?: boolean; } = {},
): Promise<Packed<'Emoji'>> {
const emoji = typeof src === 'object' ? src : await this.emojisRepository.findOneByOrFail({ id: src });
@@ -32,13 +32,15 @@ export class EmojiEntityService {
name: emoji.name,
category: emoji.category,
host: opts.omitHost ? undefined : emoji.host,
// ?? emoji.originalUrl してるのは後方互換性のため
url: opts.withUrl ? (emoji.publicUrl ?? emoji.originalUrl) : undefined,
};
}
@bindThis
public packMany(
emojis: any[],
opts: { omitHost?: boolean; omitId?: boolean; } = {},
opts: { omitHost?: boolean; omitId?: boolean; withUrl?: boolean; } = {},
) {
return Promise.all(emojis.map(x => this.pack(x, opts)));
}

View File

@@ -29,5 +29,9 @@ export const packedEmojiSchema = {
optional: true, nullable: true,
description: 'The local host is represented with `null`.',
},
url: {
type: 'string',
optional: true, nullable: false,
},
},
} as const;

View File

@@ -83,6 +83,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
emojis: await this.emojiEntityService.packMany(emojis, {
omitId: true,
omitHost: true,
withUrl: true,
}),
};
});

View File

@@ -2,7 +2,7 @@ import { Inject, Injectable } from '@nestjs/common';
import Redis from 'ioredis';
import { v4 as uuid } from 'uuid';
import { IsNull } from 'typeorm';
import autwh from 'autwh';
import * as autwh from 'autwh';
import type { Config } from '@/config.js';
import type { UserProfilesRepository, UsersRepository } from '@/models/index.js';
import { DI } from '@/di-symbols.js';

View File

@@ -8,7 +8,7 @@
},
"dependencies": {
"@discordapp/twemoji": "14.0.2",
"@rollup/plugin-alias": "4.0.2",
"@rollup/plugin-alias": "4.0.3",
"@rollup/plugin-json": "6.0.0",
"@rollup/pluginutils": "5.0.2",
"@syuilo/aiscript": "0.12.2",
@@ -18,10 +18,10 @@
"autobind-decorator": "2.4.0",
"autosize": "5.0.2",
"blurhash": "2.0.4",
"broadcast-channel": "4.20.1",
"broadcast-channel": "4.20.2",
"browser-image-resizer": "git+https://github.com/misskey-dev/browser-image-resizer#v2.2.1-misskey.3",
"canvas-confetti": "^1.6.0",
"chart.js": "4.1.2",
"chart.js": "4.2.0",
"chartjs-adapter-date-fns": "3.0.0",
"chartjs-chart-matrix": "^1.3.0",
"chartjs-plugin-gradient": "0.6.1",
@@ -41,10 +41,10 @@
"misskey-js": "0.0.14",
"photoswipe": "5.3.4",
"prismjs": "1.29.0",
"punycode": "2.2.0",
"punycode": "2.3.0",
"querystring": "0.2.1",
"rndstr": "1.0.0",
"rollup": "3.10.0",
"rollup": "3.10.1",
"s-age": "1.1.2",
"sanitize-html": "^2.8.1",
"sass": "1.57.1",
@@ -69,7 +69,7 @@
},
"devDependencies": {
"@types/escape-regexp": "0.0.1",
"@types/glob": "8.0.0",
"@types/glob": "8.0.1",
"@types/gulp": "4.0.10",
"@types/gulp-rename": "2.0.1",
"@types/matter-js": "0.18.2",
@@ -82,13 +82,13 @@
"@types/uuid": "9.0.0",
"@types/websocket": "1.0.5",
"@types/ws": "8.5.4",
"@typescript-eslint/eslint-plugin": "5.48.1",
"@typescript-eslint/parser": "5.48.1",
"@typescript-eslint/eslint-plugin": "5.48.2",
"@typescript-eslint/parser": "5.48.2",
"@vue/runtime-core": "3.2.45",
"cross-env": "7.0.3",
"cypress": "12.3.0",
"eslint": "8.31.0",
"eslint-plugin-import": "2.27.4",
"eslint": "8.32.0",
"eslint-plugin-import": "2.27.5",
"eslint-plugin-vue": "9.9.0",
"start-server-and-test": "1.15.2",
"vue-eslint-parser": "^9.1.0",

View File

@@ -24,7 +24,7 @@
</template>
<script lang="ts" setup>
import { ComputedRef, inject, provide } from 'vue';
import { ComputedRef, inject, onMounted, onUnmounted, provide } from 'vue';
import RouterView from '@/components/global/RouterView.vue';
import MkWindow from '@/components/MkWindow.vue';
import { popout as _popout } from '@/scripts/popout';
@@ -35,6 +35,8 @@ import { mainRouter, routes } from '@/router';
import { Router } from '@/nirax';
import { i18n } from '@/i18n';
import { PageMetadata, provideMetadataReceiver, setPageMetadata } from '@/scripts/page-metadata';
import { openingWindowsCount } from '@/os';
import { claimAchievement } from '@/scripts/achievements';
const props = defineProps<{
initialPath: string;
@@ -128,6 +130,17 @@ function popout() {
windowEl.close();
}
onMounted(() => {
openingWindowsCount.value++;
if (openingWindowsCount.value >= 3) {
claimAchievement('open3windows');
}
});
onUnmounted(() => {
openingWindowsCount.value--;
});
defineExpose({
close,
});

View File

@@ -12,6 +12,7 @@ import { getStaticImageUrl } from '@/scripts/media-proxy';
import { char2twemojiFilePath, char2fluentEmojiFilePath } from '@/scripts/emoji-base';
import { defaultStore } from '@/store';
import { getEmojiName } from '@/scripts/emojilist';
import { customEmojis } from '@/custom-emojis';
const props = defineProps<{
emoji: string;
@@ -24,21 +25,24 @@ const props = defineProps<{
const char2path = defaultStore.state.emojiStyle === 'twemoji' ? char2twemojiFilePath : char2fluentEmojiFilePath;
const isCustom = computed(() => props.emoji.startsWith(':'));
const customEmojiName = props.emoji.substr(1, props.emoji.length - 2);
const customEmojiName = props.emoji.substr(1, props.emoji.length - 2).replace('@.', '');
const char = computed(() => isCustom.value ? undefined : props.emoji);
const useOsNativeEmojis = computed(() => defaultStore.state.emojiStyle === 'native' && !props.isReaction);
const url = computed(() => {
if (char.value) {
return char2path(char.value);
} else if (props.host == null) {
const found = customEmojis.find(x => x.name === customEmojiName);
return found ? found.url : null;
} else {
const rawUrl = props.host ? `/emoji/${customEmojiName}@${props.host}.webp` : `/emoji/${customEmojiName}.webp`;
const rawUrl = `/emoji/${customEmojiName}@${props.host}.webp`;
return defaultStore.state.disableShowingAnimatedImages
? getStaticImageUrl(rawUrl)
: rawUrl;
}
});
const alt = computed(() => isCustom.value ? `:${customEmojiName}:` : char.value);
let errored = $ref(false);
let errored = $ref(isCustom.value && url.value == null);
// Searching from an array with 2000 items for every emoji felt like too energy-consuming, so I decided to do it lazily on pointerenter
function computeTitle(event: PointerEvent): void {

View File

@@ -2,14 +2,17 @@ import { api } from './os';
import { miLocalStorage } from './local-storage';
const storageCache = miLocalStorage.getItem('emojis');
export let customEmojis = storageCache ? JSON.parse(storageCache) : [];
fetchCustomEmojis();
export let customEmojis: {
name: string;
aliases: string[];
category: string;
url: string;
}[] = storageCache ? JSON.parse(storageCache) : [];
export async function fetchCustomEmojis() {
const now = Date.now();
const lastFetchedAt = miLocalStorage.getItem('lastEmojisFetchedAt');
if (lastFetchedAt && (now - parseInt(lastFetchedAt)) < 1000 * 60 * 60) return;
if (lastFetchedAt && (now - parseInt(lastFetchedAt)) < 1000 * 60 * 60 * 24) return;
const res = await api('emojis', {});

View File

@@ -45,6 +45,7 @@ import { getUrlWithoutLoginId } from '@/scripts/login-id';
import { getAccountFromId } from '@/scripts/get-account-from-id';
import { miLocalStorage } from './local-storage';
import { claimAchievement, claimedAchievements } from './scripts/achievements';
import { fetchCustomEmojis } from './custom-emojis';
(async () => {
console.info(`Misskey v${version}`);
@@ -80,6 +81,19 @@ import { claimAchievement, claimedAchievements } from './scripts/achievements';
});
}
//#region Detect language & fetch translations
const localeVersion = miLocalStorage.getItem('localeVersion');
const localeOutdated = (localeVersion == null || localeVersion !== version);
if (localeOutdated) {
const res = await window.fetch(`/assets/locales/${lang}.${version}.json`);
if (res.status === 200) {
miLocalStorage.setItem('locale', await res.text());
miLocalStorage.setItem('localeVersion', version);
location.reload();
}
}
//#endregion
// タッチデバイスでCSSの:hoverを機能させる
document.addEventListener('touchend', () => {}, { passive: true });
@@ -165,6 +179,10 @@ import { claimAchievement, claimedAchievements } from './scripts/achievements';
initializeSw();
});
try {
await fetchCustomEmojis();
} catch (err) {}
const app = createApp(
window.location.search === '?zen' ? defineAsyncComponent(() => import('@/ui/zen.vue')) :
!$i ? defineAsyncComponent(() => import('@/ui/visitor.vue')) :
@@ -346,10 +364,11 @@ import { claimAchievement, claimedAchievements } from './scripts/achievements';
});
}
const now = new Date();
const m = now.getMonth() + 1;
const d = now.getDate();
if ($i.birthday) {
const now = new Date();
const m = now.getMonth() + 1;
const d = now.getDate();
const bm = parseInt($i.birthday.split('-')[1]);
const bd = parseInt($i.birthday.split('-')[2]);
if (m === bm && d === bd) {
@@ -357,6 +376,10 @@ import { claimAchievement, claimedAchievements } from './scripts/achievements';
}
}
if (m === 1 && d === 1) {
claimAchievement('loggedInOnNewYearsDay');
}
if ($i.loggedInDays >= 3) claimAchievement('login3');
if ($i.loggedInDays >= 7) claimAchievement('login7');
if ($i.loggedInDays >= 15) claimAchievement('login15');

View File

@@ -19,6 +19,7 @@ type Keys =
'fontSize' |
'ui' |
'locale' |
'localeVersion' |
'theme' |
'customCss' |
'message_drafts' |

View File

@@ -9,7 +9,7 @@ import * as Misskey from 'misskey-js';
import { i18n } from './i18n';
import MkPostFormDialog from '@/components/MkPostFormDialog.vue';
import MkWaitingDialog from '@/components/MkWaitingDialog.vue';
import MkPageWindow from '@/components/MkPageWindow.vue'
import MkPageWindow from '@/components/MkPageWindow.vue';
import MkToast from '@/components/MkToast.vue';
import MkDialog from '@/components/MkDialog.vue';
import MkEmojiPickerDialog from '@/components/MkEmojiPickerDialog.vue';
@@ -18,6 +18,8 @@ import MkPopupMenu from '@/components/MkPopupMenu.vue';
import MkContextMenu from '@/components/MkContextMenu.vue';
import { MenuItem } from '@/types/menu';
export const openingWindowsCount = ref(0);
export const apiWithDialog = ((
endpoint: string,
data: Record<string, any> = {},

View File

@@ -8,11 +8,40 @@
</template>
<script lang="ts" setup>
import { ref } from 'vue';
import { onActivated, onDeactivated, onMounted, onUnmounted, ref } from 'vue';
import MkAchievements from '@/components/MkAchievements.vue';
import { i18n } from '@/i18n';
import { definePageMetadata } from '@/scripts/page-metadata';
import { $i } from '@/account';
import { claimAchievement } from '@/scripts/achievements';
let timer: number | null;
function viewAchievements3min() {
claimAchievement('viewAchievements3min');
}
onMounted(() => {
if (timer == null) timer = window.setTimeout(viewAchievements3min, 1000 * 60 * 3);
});
onUnmounted(() => {
if (timer != null) {
window.clearTimeout(timer);
timer = null;
}
});
onActivated(() => {
if (timer == null) timer = window.setTimeout(viewAchievements3min, 1000 * 60 * 3);
});
onDeactivated(() => {
if (timer != null) {
window.clearTimeout(timer);
timer = null;
}
});
definePageMetadata({
title: i18n.ts.achievements,

View File

@@ -47,6 +47,7 @@ import { definePageMetadata } from '@/scripts/page-metadata';
import { AsUiComponent, AsUiRoot, patch, registerAsUiLib, render } from '@/scripts/aiscript/ui';
import MkAsUi from '@/components/MkAsUi.vue';
import { miLocalStorage } from '@/local-storage';
import { claimAchievement } from '@/scripts/achievements';
const parser = new Parser();
let aiscript: Interpreter;
@@ -90,6 +91,9 @@ async function run() {
});
},
out: (value) => {
if (value.type === 'str' && value.value.toLowerCase().replace(',', '').includes('hello world')) {
claimAchievement('outputHelloWorldOnScratchpad');
}
logs.value.push({
id: Math.random(),
text: value.type === 'str' ? value.value : utils.valToString(value),

View File

@@ -0,0 +1,52 @@
<template>
<MkSpacer :content-max="1200">
<MkAchievements :user="user" :with-locked="false"/>
</MkSpacer>
</template>
<script lang="ts" setup>
import { onActivated, onDeactivated, onMounted, onUnmounted, ref } from 'vue';
import * as misskey from 'misskey-js';
import MkAchievements from '@/components/MkAchievements.vue';
import { i18n } from '@/i18n';
import { claimAchievement } from '@/scripts/achievements';
import { $i } from '@/account';
const props = defineProps<{
user: misskey.entities.User;
}>();
let timer: number | null;
function viewAchievements3min() {
if ($i && (props.user.id === $i.id)) {
claimAchievement('viewAchievements3min');
}
}
onMounted(() => {
if (timer == null) timer = window.setTimeout(viewAchievements3min, 1000 * 60 * 3);
});
onUnmounted(() => {
if (timer != null) {
window.clearTimeout(timer);
timer = null;
}
});
onActivated(() => {
if (timer == null) timer = window.setTimeout(viewAchievements3min, 1000 * 60 * 3);
});
onDeactivated(() => {
if (timer != null) {
window.clearTimeout(timer);
timer = null;
}
});
</script>
<style lang="scss" module>
</style>

View File

@@ -6,6 +6,7 @@
<div v-if="user">
<XHome v-if="tab === 'home'" :user="user"/>
<XActivity v-else-if="tab === 'activity'" :user="user"/>
<XAchievements v-else-if="tab === 'achievements'" :user="user"/>
<XReactions v-else-if="tab === 'reactions'" :user="user"/>
<XClips v-else-if="tab === 'clips'" :user="user"/>
<XPages v-else-if="tab === 'pages'" :user="user"/>
@@ -34,6 +35,7 @@ import { $i } from '@/account';
const XHome = defineAsyncComponent(() => import('./home.vue'));
const XActivity = defineAsyncComponent(() => import('./activity.vue'));
const XAchievements = defineAsyncComponent(() => import('./achievements.vue'));
const XReactions = defineAsyncComponent(() => import('./reactions.vue'));
const XClips = defineAsyncComponent(() => import('./clips.vue'));
const XPages = defineAsyncComponent(() => import('./pages.vue'));
@@ -76,7 +78,11 @@ const headerTabs = $computed(() => user ? [{
key: 'activity',
title: i18n.ts.activity,
icon: 'ti ti-chart-line',
}, ...($i && ($i.id === user.id)) || user.publicReactions ? [{
}, ...(user.host == null ? [{
key: 'achievements',
title: i18n.ts.achievements,
icon: 'ti ti-military-award',
}] : []), ...($i && ($i.id === user.id)) || user.publicReactions ? [{
key: 'reactions',
title: i18n.ts.reaction,
icon: 'ti ti-mood-happy',

View File

@@ -37,6 +37,7 @@ export const ACHIEVEMENT_TYPES = [
'passedSinceAccountCreated2',
'passedSinceAccountCreated3',
'loggedInOnBirthday',
'loggedInOnNewYearsDay',
'noteClipped1',
'noteFavorited1',
'profileFilled',
@@ -54,6 +55,7 @@ export const ACHIEVEMENT_TYPES = [
'followers500',
'followers1000',
'collectAchievements30',
'viewAchievements3min',
'iLoveMisskey',
'client30min',
'noteDeletedWithin1min',
@@ -61,6 +63,8 @@ export const ACHIEVEMENT_TYPES = [
'postedAt0min0sec',
'selfQuote',
'htl20npm',
'outputHelloWorldOnScratchpad',
'open3windows',
'driveFolderCircularReference',
'reactWithoutRead',
'clickedClickHere',
@@ -287,7 +291,7 @@ export const ACHIEVEMENT_BADGES = {
frame: 'bronze',
},
'followers100': {
img: '/fluent-emoji/1f396.png',
img: '/fluent-emoji/1f60e.png',
bg: 'linear-gradient(0deg, rgb(144 224 255), rgb(255 168 252))',
frame: 'silver',
},
@@ -311,6 +315,11 @@ export const ACHIEVEMENT_BADGES = {
bg: 'linear-gradient(0deg, rgb(255 77 77), rgb(247 155 214))',
frame: 'silver',
},
'viewAchievements3min': {
img: '/fluent-emoji/1f3c5.png',
bg: 'linear-gradient(0deg, rgb(144 224 255), rgb(255 168 252))',
frame: 'bronze',
},
'iLoveMisskey': {
img: '/fluent-emoji/2764.png',
bg: 'linear-gradient(0deg, rgb(255 77 77), rgb(247 155 214))',
@@ -346,6 +355,16 @@ export const ACHIEVEMENT_BADGES = {
bg: 'linear-gradient(0deg, rgb(220 223 225), rgb(172 192 207))',
frame: 'bronze',
},
'outputHelloWorldOnScratchpad': {
img: '/fluent-emoji/1f530.png',
bg: 'linear-gradient(0deg, rgb(58 231 198), rgb(37 194 255))',
frame: 'bronze',
},
'open3windows': {
img: '/fluent-emoji/1f5a5.png',
bg: 'linear-gradient(0deg, rgb(144 224 255), rgb(255 168 252))',
frame: 'bronze',
},
'driveFolderCircularReference': {
img: '/fluent-emoji/1f4c2.png',
bg: 'linear-gradient(0deg, rgb(144 224 255), rgb(255 168 252))',
@@ -388,7 +407,12 @@ export const ACHIEVEMENT_BADGES = {
},
'loggedInOnBirthday': {
img: '/fluent-emoji/1f382.png',
bg: 'linear-gradient(0deg, rgb(144 224 255), rgb(255 168 252))',
bg: 'linear-gradient(0deg, rgb(255 77 77), rgb(247 155 214))',
frame: 'silver',
},
'loggedInOnNewYearsDay': {
img: '/fluent-emoji/1f38d.png',
bg: 'linear-gradient(0deg, rgb(255 144 144), rgb(255 232 168))',
frame: 'silver',
},
'cookieClicked': {
@@ -409,16 +433,22 @@ export const ACHIEVEMENT_BADGES = {
export const claimedAchievements = ($i && $i.achievements) ? $i.achievements.map(x => x.name) : [];
export function claimAchievement(type: typeof ACHIEVEMENT_TYPES[number]) {
const claimingQueue = new Set<string>();
export async function claimAchievement(type: typeof ACHIEVEMENT_TYPES[number]) {
if (claimedAchievements.includes(type)) return;
os.api('i/claim-achievement', { name: type });
claimingQueue.add(type);
claimedAchievements.push(type);
await new Promise(resolve => setTimeout(resolve, (claimingQueue.size - 1) * 500));
window.setTimeout(() => {
claimingQueue.delete(type);
}, 500);
os.api('i/claim-achievement', { name: type });
}
if (_DEV_) {
(window as any).unlockAllAchievements = async () => {
(window as any).unlockAllAchievements = () => {
for (const t of ACHIEVEMENT_TYPES) {
await new Promise(resolve => setTimeout(resolve, 100));
claimAchievement(t);
}
};

View File

@@ -187,7 +187,7 @@ export function getNoteMenu(props: {
});
}
function notedetails(): void {
function openDetail(): void {
os.pageWindow(`/notes/${appearNote.id}`);
}
@@ -225,7 +225,7 @@ export function getNoteMenu(props: {
), {
icon: 'ti ti-info-circle',
text: i18n.ts.details,
action: notedetails,
action: openDetail,
}, {
icon: 'ti ti-users',
text: i18n.ts.reactions,

520
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -14,7 +14,7 @@ const fs = require('fs');
stderr: process.stderr,
});
execa('pnpm', ['dlx', 'gulp', 'watch'], {
execa('pnpm', ['exec', 'gulp', 'watch'], {
cwd: __dirname + '/../',
stdout: process.stdout,
stderr: process.stderr,