Compare commits

...

14 Commits

Author SHA1 Message Date
syuilo
834cb2ea1a 12.49.1 2020-10-22 23:31:11 +09:00
syuilo
d82769abd4 New Crowdin updates (#6748)
* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

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

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

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

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)
2020-10-22 23:30:54 +09:00
syuilo
adf01ed4a4 Fix #6749 (#6754) 2020-10-22 23:10:23 +09:00
syuilo
09c007b3aa Update dependencies 🚀 2020-10-22 23:09:03 +09:00
syuilo
526ff177aa Update dependenceis 🚀 2020-10-21 22:20:03 +09:00
syuilo
0e40d4e796 Clean up 2020-10-21 21:50:24 +09:00
syuilo
172ebab7bd Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2020-10-21 19:36:50 +09:00
syuilo
aa4493fe5c Fix api permission definition 2020-10-21 19:36:47 +09:00
syuilo
a68a88f79e Update README.md 2020-10-20 17:32:17 +09:00
syuilo
1de7dc94e1 Delete CHANGELOG.md 2020-10-19 20:55:19 +09:00
syuilo
59cb7992e2 12.49.0 2020-10-19 19:43:30 +09:00
syuilo
87b15df47b Auto adjust window size 2020-10-19 19:42:55 +09:00
syuilo
6932d86240 New Crowdin updates (#6667)
* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Spanish)

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

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

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

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

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

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

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

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

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

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

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

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

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

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

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

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

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

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (English)
2020-10-19 19:39:05 +09:00
syuilo
87f61e714a Resolve #6087 2020-10-19 19:29:04 +09:00
37 changed files with 2134 additions and 3214 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge&logo=github)](http://makeapullrequest.com)
[![Awesome Humane Tech](https://raw.githubusercontent.com/humanetech-community/awesome-humane-tech/main/humane-tech-badge.svg?sanitize=true)](https://github.com/humanetech-community/awesome-humane-tech)
**A forever evolving, sophisticated microblogging platform.**
**A forever evolving, professional microblogging platform.**
<p align="justify">
<a href="https://join.misskey.page/">Misskey</a> is a decentralized microblogging platform born on Earth.

View File

@@ -14,8 +14,12 @@ noNotes: "لم يتم العثور على أية ملاحظات"
noNotifications: "ليس هناك أية اشعارات"
instance: "مثيل الخادم"
settings: "الاعدادات"
basicSettings: "الاعدادات الأساسية"
otherSettings: "إعدادات أخرى"
openInWindow: "افتح في نافذة جديدة"
profile: "الملف التعريفي"
timeline: "الخيط الزمني"
noAccountDescription: "لم يكتب هذا المستخدم سيرته بعد."
login: "لِج"
loggingIn: "جارٍ تسجيل الدخول"
logout: "الخروج"
@@ -32,18 +36,26 @@ copyContent: "انسخ المحتوى"
copyLink: "انسخ الرابط"
delete: "حذف"
deleteAndEdit: "إزالة وإعادة الصياغة"
deleteAndEditConfirm: "أمتأكد من حذف الملاحظة؟ ستفقد كل مشاركاتها، والتفاعلات، والردود عليها."
addToList: "أضفه إلى قائمة"
sendMessage: "أرسل رسالة"
copyUsername: "انسخ اسم المستخدم"
searchUser: "ابحث عن مستخدمين"
reply: "رد"
loadMore: "عرض المزيد"
youGotNewFollower: "يتابعك"
receiveFollowRequest: "تلقيت طلب متابعة"
followRequestAccepted: "قُبل طلب المتابعة"
mention: "أشر الى"
mentions: "الإشارات"
directNotes: "الملاحظات المباشرة"
importAndExport: "إستورد / صدر"
import: "استيراد"
export: "تصدير"
files: "الملفات"
download: "تنزيل"
driveFileDeleteConfirm: "أمتأكد من حذف ملف {name}؟ كل الملاحظات المُرفق بها هذا الملف ستحذف."
unfollowConfirm: "أمتأكد من إلغاء متابعة {name}؟"
lists: "القوائم"
noLists: "ليس لديك أية قائمة"
note: "ملاحظة"
@@ -53,8 +65,10 @@ followers: "المتابِعين"
followsYou: "يتابعك"
createList: "إنشاء قائمة"
manageLists: "إدارة القوائم"
error: "حدث خطأ ما"
error: "خطأ"
somethingHappened: "حدث خطأ"
retry: "حاول مجددًا"
pageLoadError: "فشل تحميل الصفحة"
enterListName: "اسم القائمة"
privacy: "الخصوصية"
makeFollowManuallyApprove: "القبول يدويا طلبات الإشتراك"
@@ -71,16 +85,24 @@ you: "أنت"
clickToShow: "اضغط للعرض"
sensitive: "محتوى حساس"
add: "إضافة"
reaction: "تفاعل"
rememberNoteVisibility: "تذكر إعدادت مدى رؤية الملاحظات"
attachCancel: "أزل المرفق"
enterFileName: "ادخل اسم الملف"
mute: "اكتم"
unmute: "إلغاء الكتم"
block: "احجب"
unblock: "إلغاء الحجب"
blockConfirm: "أمتأكد من حجب هذا الحساب؟"
unblockConfirm: "أمتأكد من إلغاء حجب هذا الحساب؟"
selectList: "اختر قائمة"
editWidgetsExit: "تم"
customEmojis: "إيموجي مخصص"
addEmoji: "إضافة إيموجي"
cacheRemoteFiles: "خزن مؤقتا الملفات البعيدة"
autoAcceptFollowed: "اقبل طلبات المتابعة تلقائيا من الحسابات المتابَعة"
addAcount: "إضافة حساب"
loginFailed: "فشل الولوج"
showOnRemote: "رؤيته على مثيل الخادم البُعدي"
general: "الرئيسية"
wallpaper: "خلفية الشاشة"
@@ -88,6 +110,7 @@ setWallpaper: "استخدم خلفية الشاشة"
removeWallpaper: "إزالة خلفية الشاشة"
searchWith: "البحث: {q}"
youHaveNoLists: "لا تمتلك أية قائمة"
followConfirm: "أتريد متابعة {name}؟"
proxyAccount: "حساب وكيل البروكسي"
host: "المضيف"
selectUser: "حدّد مستخدمًا"
@@ -96,6 +119,8 @@ annotation: "التعليقات"
federation: "الفديرالية"
instances: "مثيل الخادم"
latestRequestSentAt: "آخر طلب أرسِل في"
latestRequestReceivedAt: "آخر طلب تُلقي في"
storageUsage: "مساحة التخزين المستخدمة"
charts: "المنحنيات البيانية"
perHour: "في الساعة"
perDay: "في اليوم"
@@ -127,7 +152,6 @@ processing: "المعالجة جارية"
preview: "معاينة"
default: "افتراضي"
noCustomEmojis: "ليس هناك إيموجيات"
customEmojisOfRemote: "الإيموجيات القادمة مِن مثيلات الخوادم الأخرى"
federating: "الفديرالية جارية"
blocked: "محجوب"
suspended: "مُعلّق"
@@ -313,7 +337,6 @@ total: "المجموع"
weekOverWeekChanges: "أسبوعيا"
dayOverDayChanges: "يوميا"
appearance: "المظهر"
clinetSettings: "إعدادات التطبيق"
accountSettings: "إعدادات الحساب"
promotion: "ترقية"
promote: "روِّج"
@@ -366,6 +389,7 @@ _theme:
make: "إنشاء قالب"
alpha: "الشفافية"
keys:
mention: "أشر الى"
messageBg: "خلفية الدردشة"
_sfx:
note: "الملاحظات"
@@ -508,7 +532,9 @@ _notification:
youWereFollowed: "يتابعك"
_types:
follow: "المتابَعون"
mention: "أشر الى"
quote: "اقتبس"
reaction: "تفاعل"
_deck:
_columns:
notifications: "الإشعارات"

View File

@@ -16,6 +16,9 @@ noNotes: "Keine Notizen"
noNotifications: "Keine Benachrichtigungen"
instance: "Instanz"
settings: "Einstellungen"
basicSettings: "Allgemeine Einstellungen"
otherSettings: "Andere Einstellungen"
openInWindow: "In neuem Fenster öffnen"
profile: "Profil"
timeline: "Chronik"
noAccountDescription: "Dieser Nutzer hat seine Profilbeschreibung noch nicht ausgefüllt."
@@ -40,6 +43,7 @@ deleteAndEditConfirm: "Möchtest du diese Notiz wirklich löschen und bearbeiten
addToList: "Zu Liste hinzufügen"
sendMessage: "Nachricht senden"
copyUsername: "Benutzernamen kopieren"
searchUser: "Benutzersuche"
reply: "Antworten"
loadMore: "Mehr anzeigen"
youGotNewFollower: "Du hast einen neuen Follower"
@@ -66,8 +70,11 @@ followers: "Gefolgt von"
followsYou: "Folgt dir"
createList: "Liste erstellen"
manageLists: "Listen verwalten"
error: "Ein Problem ist aufgetreten"
error: "Fehler"
somethingHappened: "Ein Fehler ist aufgetreten"
retry: "Wiederholen"
pageLoadError: "Laden der Seite fehlgeschlagen."
pageLoadErrorDescription: "Dieser Fehler wird meist durch Netzwerkfehler oder den Browser-Cache verursacht. Versuche den Browser-Cache zu leeren und es nach kurzer Zeit noch einmal zu probieren."
enterListName: "Listennamen eingeben"
privacy: "Privatsphäre"
makeFollowManuallyApprove: "Follow-Anfragen benötigen Bestätigung"
@@ -106,6 +113,8 @@ unsuspendConfirm: "Möchtest du die Sperrung dieses Benutzers wirklich aufheben?
selectList: "Wähle eine Liste aus"
selectAntenna: "Antenne auswählen"
selectWidget: "Widget auswählen"
editWidgets: "Widgets bearbeiten"
editWidgetsExit: "Fertig"
customEmojis: "Benutzerdefinierte Emojis"
emoji: "Emoji"
emojiName: "Emojiname"
@@ -177,7 +186,6 @@ processing: "In Bearbeitung"
preview: "Vorschau"
default: "Standard"
noCustomEmojis: "Es existieren keine Emojis"
customEmojisOfRemote: "Emojis von anderen Instanzen"
noJobs: "Es gibt keine Jobs"
federating: "Föderiert"
blocked: "Blockiert"
@@ -445,7 +453,7 @@ total: "Gesamt"
weekOverWeekChanges: "Wöchentlich"
dayOverDayChanges: "Täglich"
appearance: "Aussehen"
clinetSettings: "Client-Einstellungen"
clientSettings: "Client-Einstellungen"
accountSettings: "Benutzerkonto-Einstellungen"
promotion: "Hervorgehoben"
promote: "Hervorheben"
@@ -476,6 +484,8 @@ newNoteRecived: "Es gibt neue Notizen"
sounds: "Töne"
listen: "Anhören"
none: "Keine"
showInPage: "In Seiten anzeigen"
popout: "Pop-Up"
volume: "Lautstärke"
details: "Details"
chooseEmoji: "Wähle ein Emoji"
@@ -518,7 +528,6 @@ enableInfiniteScroll: "Automatisch mehr Notizen laden"
visibility: "Sichtbarkeit"
poll: "Umfrage"
useCw: "Inhalt verstecken"
fixedWidgetsPosition: "Widgetposition fixieren"
enablePlayer: "Video-Player öffnen"
disablePlayer: "Video-Player schließen"
expandTweet: "Tweet ausklappen"
@@ -564,8 +573,26 @@ overview: "Übersicht"
logs: "Logs"
delayed: "Verzögert"
database: "Datenbank"
channel: "Kanal"
channel: "Kanäle"
create: "Erstellen"
notificationSetting: "Benachrichtigungseinstellungen"
notificationSettingDesc: "Wähle die Art der anzuzeigenden Benachrichtigung"
useGlobalSetting: "Globale Einstellung verwenden"
useGlobalSettingDesc: "Wenn dies eingeschaltet ist, werden die Benachrichtigungseinstellungen deines Benutzerkontos verwendet. Wenn dies ausgeschaltet ist, können individuelle Einstellungen vorgenommen werden."
other: "Andere"
regenerateLoginToken: "Login-Token regenerieren"
regenerateLoginTokenDescription: "Den bei Logins intern verwendeten Token regenerieren. Normalerweise wird dies nicht benötigt. Bei Regeneration werden alle Geräte ausgeloggt."
setMultipleBySeparatingWithSpace: "Trenne Elemente durch ein Leerzeichen um mehrere Einstellungen zu kofigurieren."
fileIdOrUrl: "Datei-ID oder URL"
chatOpenBehavior: "Verhalten des Chatfensters bei Öffnung"
sample: "Beispiel"
abuseReports: "Melden"
reportAbuse: "Melden"
reportAbuseOf: "{name} melden"
fillAbuseReportDescription: "Bitte gib Details für diese Meldung an. Falls es sich um eine spezielle Notiz handelt, bitte gib dessen URL an."
abuseReported: "Die Meldung wurde versendet. Vielen Dank."
send: "Senden"
abuseMarkAsResolved: "Meldung als gelöst markieren"
_serverDisconnectedBehavior:
reload: "Automatisch aktualisieren"
dialog: "Warnungsfenster zeigen"
@@ -576,13 +603,13 @@ _channel:
setBanner: "Kanalbanner festlegen"
removeBanner: "Kanalbanner entfernen"
featured: "Trends"
owned: "Besitzer"
following: "Folgt"
owned: "Besitzt"
following: "Gefolgt"
usersCount: "{n} Teilnehmer"
notesCount: "{n} Notizen"
_sidebar:
full: "Voll"
icon: "Profilbild"
icon: "Symbol"
hide: "Ausblenden"
_wordMute:
muteWords: "Wort stummschalten"
@@ -782,6 +809,7 @@ _widgets:
photos: "Fotos"
digitalClock: "Digitaluhr"
federation: "Föderation"
postForm: "Neue Notiz anfertigen"
_cw:
hide: "Ausblenden"
show: "Mehr anzeigen"
@@ -1238,14 +1266,17 @@ _notification:
youWereInvitedToGroup: "Du wurdest in eine Gruppe eingeladen"
_types:
all: "Alle"
follow: "Folgt"
mention: "Erwähnung"
follow: "Neue Follower"
mention: "Erwähnungen"
reply: "Antworten"
renote: "Renote"
quote: "Zitieren"
renote: "Renotes"
quote: "Zitationen"
reaction: "Reaktionen"
pollVote: "Umfragen"
receiveFollowRequest: "Follow-Anfragen"
pollVote: "Antworten auf Umfragen"
receiveFollowRequest: "Follow-Anfrage erhalten"
followRequestAccepted: "Follow-Anfrage akzeptiert"
groupInvited: "Gruppeneinladung erhalten"
app: "Benachrichtigungen von Apps"
_deck:
alwaysShowMainColumn: "Hauptspalte immer zeigen"
columnAlign: "Spalten ausrichten"

View File

@@ -16,6 +16,9 @@ noNotes: "No notes"
noNotifications: "No notifications"
instance: "Instance"
settings: "Settings"
basicSettings: "Basic Settings"
otherSettings: "Other Settings"
openInWindow: "Open in new window"
profile: "Profile"
timeline: "Timeline"
noAccountDescription: "This user has not written their bio yet."
@@ -29,7 +32,7 @@ users: "Users"
addUser: "Add a user"
favorite: "Favorite"
favorites: "Favorites"
unfavorite: "Undo favorite"
unfavorite: "Unfavorite"
pin: "Pin to profile"
unpin: "Unpin from profile"
copyContent: "Copy contents"
@@ -40,6 +43,7 @@ deleteAndEditConfirm: "Are you sure you want to delete this note and edit it? Yo
addToList: "Add to list"
sendMessage: "Send a message"
copyUsername: "Copy username"
searchUser: "User search"
reply: "Reply"
loadMore: "Load more"
youGotNewFollower: "Followed you"
@@ -66,8 +70,11 @@ followers: "Followers"
followsYou: "Follows you"
createList: "Create list"
manageLists: "Manage lists"
error: "Something happened :("
error: "Error"
somethingHappened: "An error occurred"
retry: "Retry"
pageLoadError: "Failed to load page"
pageLoadErrorDescription: "This is normally caused by network errors or the browser's cache. Try clearung the cache and then try again after waiting a little while."
enterListName: "List name"
privacy: "Privacy"
makeFollowManuallyApprove: "Follow requests require approval"
@@ -106,6 +113,8 @@ unsuspendConfirm: "Are you sure you that want to unsuspend this account?"
selectList: "Select a list"
selectAntenna: "Select an Antenna"
selectWidget: "Select a widget"
editWidgets: "Edit widgets"
editWidgetsExit: "Done"
customEmojis: "Custom Emoji"
emoji: "Emoji"
emojiName: "Emoji name"
@@ -177,7 +186,6 @@ processing: "Processing"
preview: "Preview"
default: "Default"
noCustomEmojis: "There are no emojis"
customEmojisOfRemote: "Emojis from other instances"
noJobs: "There are no jobs"
federating: "Federating"
blocked: "Blocked"
@@ -445,7 +453,7 @@ total: "Total"
weekOverWeekChanges: "Weekly"
dayOverDayChanges: "Daily"
appearance: "Appearance"
clinetSettings: "Client Settings"
clientSettings: "Client settings"
accountSettings: "Account Settings"
promotion: "Promoted"
promote: "Promote"
@@ -476,6 +484,8 @@ newNoteRecived: "You've got a new note"
sounds: "Sounds"
listen: "Listen"
none: "None"
showInPage: "Show in Pages"
popout: "Pop-out"
volume: "Volume"
details: "Details"
chooseEmoji: "Choose an emoji"
@@ -518,7 +528,6 @@ enableInfiniteScroll: "Enable infinite scrolling"
visibility: "Visiblility"
poll: "Poll"
useCw: "Hide content"
fixedWidgetsPosition: "Make widget position fixed"
enablePlayer: "Open video player"
disablePlayer: "Close video player"
expandTweet: "Expand tweet"
@@ -564,8 +573,26 @@ overview: "Overview"
logs: "Logs"
delayed: "Delayed"
database: "Database"
channel: "Channel"
channel: "Channels"
create: "Create"
notificationSetting: "Notification settings"
notificationSettingDesc: "Select the type of notification to display"
useGlobalSetting: "Use global setting"
useGlobalSettingDesc: "If turned on, your account's notification settings will be used. If turned off, individual configurations can be made."
other: "Other"
regenerateLoginToken: "Regenerate login token"
regenerateLoginTokenDescription: "Regenerate the token used internally during login. Normally this action is not necessary. If regenerated, all devices will be logged out."
setMultipleBySeparatingWithSpace: "You can set multiple by separating them with spaces."
fileIdOrUrl: "File-ID or URL"
chatOpenBehavior: "Behavior of the chat window when opened"
sample: "Sample"
abuseReports: "Reports"
reportAbuse: "Report"
reportAbuseOf: "Report {name}"
fillAbuseReportDescription: "Please fill in the report details. If it is about a specific note, please include its URL."
abuseReported: "Your report has been sent. Thank you very much."
send: "Send"
abuseMarkAsResolved: "Mark report as resolved"
_serverDisconnectedBehavior:
reload: "Automatically reload"
dialog: "Show warning dialog"
@@ -576,8 +603,8 @@ _channel:
setBanner: "Set banner"
removeBanner: "Remove banner"
featured: "Trending"
owned: "Owner"
following: "Following"
owned: "Owned"
following: "Followed"
usersCount: "{n} Participants"
notesCount: "{n} Notes"
_sidebar:
@@ -782,6 +809,7 @@ _widgets:
photos: "Photos"
digitalClock: "Digital clock"
federation: "Federation"
postForm: "Compose a note"
_cw:
hide: "Hide"
show: "Load more"
@@ -1238,14 +1266,17 @@ _notification:
youWereInvitedToGroup: "Invited to group"
_types:
all: "All"
follow: "Following"
mention: "Mention"
follow: "Follows"
mention: "Mentions"
reply: "Replies"
renote: "Renote"
quote: "Quote"
reaction: "Reaction"
pollVote: "Polls"
receiveFollowRequest: "Follow requests"
renote: "Renotes"
quote: "Quotes"
reaction: "Reactions"
pollVote: "Votes on polls"
receiveFollowRequest: "Follow request received"
followRequestAccepted: "Follow request accepted"
groupInvited: "Invited to groups"
app: "Notifications from apps"
_deck:
alwaysShowMainColumn: "Always show main column"
columnAlign: "Align columns"

View File

@@ -66,7 +66,6 @@ followers: "Seguidores"
followsYou: "Te sigue"
createList: "Crear lista"
manageLists: "Administrar listas"
error: "Ocurrió un problema"
retry: "Reintentar"
enterListName: "Ingrese nombre de lista"
privacy: "Privacidad"
@@ -177,7 +176,6 @@ processing: "Procesando"
preview: "Vista previa"
default: "Predeterminado"
noCustomEmojis: "No hay emojis personalizados"
customEmojisOfRemote: "Emojis remotos"
noJobs: "No hay trabajos"
federating: "Federando"
blocked: "Bloqueando"
@@ -445,7 +443,6 @@ total: "Total"
weekOverWeekChanges: "Dif semanal"
dayOverDayChanges: "Dif diaria"
appearance: "Apariencia"
clinetSettings: "Ajustes del cliente"
accountSettings: "Ajustes de cuenta"
promotion: "Promovido"
promote: "Promover"
@@ -518,7 +515,6 @@ enableInfiniteScroll: "Activar scroll infinito"
visibility: "Visibilidad"
poll: "Encuesta"
useCw: "Esconder contenidos"
fixedWidgetsPosition: "Fijar la posición de los widgets"
enablePlayer: "Abrir reproductor"
disablePlayer: "Cerrar reproductor"
expandTweet: "Expandir tweet"
@@ -566,6 +562,10 @@ delayed: "atrasado"
database: "Base de datos"
channel: "Canal"
create: "Crear"
notificationSetting: "Ajustes de Notificaciones"
notificationSettingDesc: "Por favor elija el tipo de notificación a mostrar"
useGlobalSetting: "Usar ajustes globales"
useGlobalSettingDesc: "Al activarse, se usará la configuración de notificaciones de la cuenta, al desactivarse se pueden hacer configuraciones particulares."
_serverDisconnectedBehavior:
reload: "Recargar automáticamente"
dialog: "Mostrar diálogo de advertencia"
@@ -782,6 +782,7 @@ _widgets:
photos: "Fotos"
digitalClock: "Reloj digital"
federation: "Federación"
postForm: "Formulario"
_cw:
hide: "Ocultar"
show: "Ver más"
@@ -1244,8 +1245,11 @@ _notification:
renote: "Renotar"
quote: "Citar"
reaction: "Reacción"
pollVote: "Encuestas"
receiveFollowRequest: "Solicitudes de seguimiento"
pollVote: "Votado en la encuesta"
receiveFollowRequest: "Recibió una solicitud de seguimiento"
followRequestAccepted: "El seguimiento fue aceptado"
groupInvited: "Invitado al grupo"
app: "Notificaciones desde aplicaciones"
_deck:
alwaysShowMainColumn: "Siempre mostrar la columna principal"
columnAlign: "Alinear columnas"

View File

@@ -16,6 +16,9 @@ noNotes: "Aucune note"
noNotifications: "Aucune notification"
instance: "Instance"
settings: "Paramètres"
basicSettings: "Paramètres basiques"
otherSettings: "Autres paramètres"
openInWindow: "Ouvrir dans une nouvelle fenêtre"
profile: "Profil"
timeline: "Fil"
noAccountDescription: "Lutilisateur·rice na pas encore renseigné de biographie de présentation sur son profil."
@@ -40,6 +43,7 @@ deleteAndEditConfirm: "Êtes-vous sûr·e de vouloir supprimer cette note et la
addToList: "Ajouter à une liste"
sendMessage: "Envoyer un message"
copyUsername: "Copier le nom dutilisateur·rice"
searchUser: "Chercher un·e utilisateur·rice"
reply: "Répondre"
loadMore: "Afficher plus …"
youGotNewFollower: "Vous suit"
@@ -66,8 +70,10 @@ followers: "Abonné·e·s"
followsYou: "Vous suit"
createList: "Créer une liste"
manageLists: "Gérer les listes"
error: "Une erreur est survenue"
error: "Erreur"
somethingHappened: "Une erreur est survenue"
retry: "Réessayer"
pageLoadError: "Le chargement de la page a échoué"
enterListName: "Nom de la liste"
privacy: "Confidentialité"
makeFollowManuallyApprove: "Accepter manuellement les demandes dabonnement"
@@ -106,6 +112,8 @@ unsuspendConfirm: "Êtes-vous sûr·e de vouloir annuler la suspension de ce com
selectList: "Sélectionner une liste"
selectAntenna: "Sélectionner une antenne"
selectWidget: "Sélectionner un widget"
editWidgets: "Modifier les widgets"
editWidgetsExit: "Fait"
customEmojis: "Émojis personnalisés"
emoji: "Émoji"
emojiName: "Nom de lémoji"
@@ -177,7 +185,6 @@ processing: "Traitement en cours"
preview: "Prévisualisation"
default: "Par défaut"
noCustomEmojis: "Il n'y a pas démoji"
customEmojisOfRemote: "Émojis provenant des autres instances"
noJobs: "Il ny a aucune tâche planifiée"
federating: "En cours de fédération"
blocked: "Bloqué·e"
@@ -264,6 +271,7 @@ rename: "Renommer"
avatar: "Avatar"
banner: "Bannière"
nsfw: "Contenu sensible"
whenServerDisconnected: "Lorsque la connexion au serveur est perdue"
disconnectedFromServer: "Déconnecté·e du serveur"
reload: "Rafraîchir"
doNothing: "Ignorer"
@@ -444,7 +452,7 @@ total: "Total"
weekOverWeekChanges: "Diff hebdo"
dayOverDayChanges: "Diff quotidien"
appearance: "Aspect"
clinetSettings: "Paramètres du client"
clientSettings: "Paramètres du client"
accountSettings: "Paramètres du compte"
promotion: "Promu"
promote: "Promouvoir"
@@ -474,6 +482,7 @@ newNoteRecived: "Vous avez une nouvelle note"
sounds: "Sons"
listen: "Écouter"
none: "Rien"
popout: "Fenêtre contextuelle"
volume: "Volume"
details: "Détails"
chooseEmoji: "Choisissez un émoji"
@@ -516,7 +525,6 @@ enableInfiniteScroll: "Activer le défilement infini"
visibility: "Visibilité"
poll: "Sondage"
useCw: "Masquer le contenu"
fixedWidgetsPosition: "Rendre la position du widget fixe"
enablePlayer: "Activer le lecteur vidéo"
disablePlayer: "Désactiver le lecteur vidéo"
expandTweet: "Étendre le tweet"
@@ -538,6 +546,7 @@ tokenRequested: "Autoriser l'accès au compte"
pluginTokenRequestedDescription: "Ce plugin pourra utiliser les autorisations définies ici."
notificationType: "Type de notifications"
edit: "Editer"
useStarForReactionFallback: "Utiliser ★ comme alternative si lémoji de réaction est inconnu"
emailConfig: "Configuration du serveur email"
enableEmail: "Activer la distribution de courriel"
emailConfigInfo: "Utilisé pour confirmer votre adresse de courriel et la réinitialisation de votre mot de passe en cas doubli."
@@ -549,16 +558,45 @@ smtpUser: "Nom dutilisateur·rice"
smtpPass: "Mot de passe"
emptyToDisableSmtpAuth: "Laisser le nom dutilisateur et le mot de passe vides pour désactiver la vérification SMTP"
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"
userSaysSomething: "{name} a dit quelque chose"
makeActive: "Activer"
display: "Affichage"
copy: "Copier"
metrics: "Métriques"
overview: "Aperçu"
logs: "Journaux"
delayed: "en retard"
database: "Base de données"
channel: "Canaux"
create: "Créer"
notificationSetting: "Paramètres des notifications "
notificationSettingDesc: "Sélectionnez le type de notification à afficher"
useGlobalSetting: "Utiliser paramètre général"
other: "Autre"
regenerateLoginToken: "Régénérer le jeton de connexion"
setMultipleBySeparatingWithSpace: "Vous pouvez définir plus dun, séparés par des espaces."
fileIdOrUrl: "ID du fichier ou URL"
chatOpenBehavior: "Comportement de la fenêtre de discussion lors de son ouverture"
_serverDisconnectedBehavior:
reload: "Rechargement automatique"
_channel:
create: "Créer un canal"
edit: "Éditer le canal"
removeBanner: "Supprimer la bannière"
featured: "Tendances"
usersCount: "{n} Participants"
notesCount: "{n} Notes"
_sidebar:
full: "Complet"
icon: "Avatar"
hide: "Masquer"
_wordMute:
muteWords: "Mot à mettre en sourdine"
muteWordsDescription: "Séparer avec des espaces pour la condition AND. Séparer avec un saut de ligne pour une condition OR."
mutedNotes: "Notes mises en sourdine"
_theme:
explore: "Explorer les thèmes"
install: "Installer un thème"
@@ -569,6 +607,8 @@ _theme:
invalid: "Le format du thème n'est pas valide"
make: "Créer un thème"
base: "Base"
addConstant: "Ajouter une constante"
constant: "Constante"
defaultValue: "Valeur par défaut"
color: "Couleur"
key: "Clé "
@@ -594,6 +634,7 @@ _theme:
renote: "Renote"
divider: "Séparateur"
infoWarnFg: "Texte davertissement"
cwBg: "Arrière-plan du CW"
badge: "Badge"
messageBg: "Arrière plan de la discussion"
_sfx:
@@ -678,6 +719,8 @@ _permissions:
"write:page-likes": "Mettre à jour les favoris sur les Pages"
"read:user-groups": "Voir les groupes d'utilisateur·rice·s"
"write:user-groups": "Éditer les groupes des utilisateur·rice·s"
"read:channels": "Lire les canaux"
"write:channels": "Modifier les canaux"
_auth:
shareAccess: "Autoriser \"{name}\" à accéder à votre compte ?"
shareAccessAsk: "Voulez-vous vraiment autoriser cette application à accéder à votre compte?"
@@ -711,6 +754,7 @@ _widgets:
photos: "Photos"
digitalClock: "Horloge numérique"
federation: "Fédération"
postForm: "Formulaire à publier"
_cw:
hide: "Masquer"
show: "Afficher plus …"
@@ -752,6 +796,7 @@ _visibility:
_postForm:
replyPlaceholder: "Répondre à cette note ..."
quotePlaceholder: "Citez cette note ..."
channelPlaceholder: "Publier vers le canal"
_placeholders:
a: "Quoi de neuf ?"
b: "Quoi de neuf ?"
@@ -1165,11 +1210,15 @@ _notification:
yourFollowRequestAccepted: "Votre demande dabonnement a été accepté"
youWereInvitedToGroup: "Invité au groupe"
_types:
all: "Toutes"
follow: "Abonnements"
mention: "Mentionner"
reply: "Réponses"
renote: "Renote"
quote: "Citer"
reaction: "Réactions"
groupInvited: "Invité aux groupes"
app: "Notifications provenant des apps"
_deck:
alwaysShowMainColumn: "Toujours afficher la colonne principale"
columnAlign: "Aligner les colonnes"

View File

@@ -586,6 +586,13 @@ setMultipleBySeparatingWithSpace: "スペースで区切って複数設定でき
fileIdOrUrl: "ファイルIDまたはURL"
chatOpenBehavior: "チャットを開くときの動作"
sample: "サンプル"
abuseReports: "通報"
reportAbuse: "通報"
reportAbuseOf: "{name}を通報する"
fillAbuseReportDescription: "通報理由の詳細を記入してください。対象のートがある場合はそのURLも記入してください。"
abuseReported: "内容が送信されました。ご報告ありがとうございました。"
send: "送信"
abuseMarkAsResolved: "対応済みにする"
_serverDisconnectedBehavior:
reload: "自動でリロード"

View File

@@ -65,7 +65,6 @@ followers: "フォロワー"
followsYou: "フォローされとるで"
createList: "リスト作る"
manageLists: "リストの管理"
error: "問題が発生してん"
retry: "もっぺんやってみる"
enterListName: "リスト名を入れてや"
privacy: "プライバシーってなんや?オカンの年齢か?"
@@ -173,7 +172,6 @@ processing: "処理しとる"
preview: "プレビュー"
default: "デフォルト"
noCustomEmojis: "絵文字はあらへん"
customEmojisOfRemote: "リモートの絵文字"
noJobs: "ジョブはあらへん"
federating: "連合しとる"
blocked: "ブロックしとる"

View File

@@ -66,7 +66,6 @@ followers: "팔로워"
followsYou: "당신을 팔로우합니다"
createList: "리스트 만들기"
manageLists: "리스트 관리"
error: "오류가 발생했습니다"
retry: "다시 시도"
enterListName: "리스트 이름을 입력"
privacy: "프라이버시"
@@ -177,7 +176,6 @@ processing: "처리중"
preview: "미리보기"
default: "기본값"
noCustomEmojis: "이모지가 없습니다"
customEmojisOfRemote: "다른 인스턴스들의 이모지"
noJobs: "작업이 없습니다"
federating: "연합 중"
blocked: "차단됨"
@@ -443,7 +441,6 @@ remote: "리모트"
total: "합계"
weekOverWeekChanges: "지난주보다"
dayOverDayChanges: "어제보다"
clinetSettings: "클라이언트 설정"
accountSettings: "계정 설정"
promotion: "프로모션"
promote: "프로모션하기"
@@ -515,7 +512,6 @@ enableInfiniteScroll: "자동으로 좀 더 보기"
visibility: "공개 범위"
poll: "투표"
useCw: "내용 숨기기"
fixedWidgetsPosition: "위젯의 위치 고정"
enablePlayer: "플레이어 열기"
disablePlayer: "플레이어 닫기"
expandTweet: "트윗 확장하기"
@@ -708,6 +704,7 @@ _widgets:
photos: "사진"
digitalClock: "디지털 시계"
federation: "연합"
postForm: "글 입력란"
_cw:
hide: "숨기기"
show: "더 보기"
@@ -1165,7 +1162,6 @@ _notification:
renote: "Renote"
quote: "인용"
reaction: "리액션"
receiveFollowRequest: "팔로우 요청"
_deck:
alwaysShowMainColumn: "메인 칼럼 항상 표시"
columnAlign: "칼럼 정렬"

View File

@@ -1,2 +1,21 @@
---
_lang_: "język polski"
search: "Szukaj"
notifications: "Powiadomienia"
username: "Nazwa użytkownika"
password: "Hasło"
ok: "OK"
gotIt: "Rozumiem!"
cancel: "Anuluj"
enterUsername: "Wprowadź nazwę użytkownika"
smtpUser: "Nazwa użytkownika"
smtpPass: "Hasło"
_sfx:
notification: "Powiadomienia"
_widgets:
notifications: "Powiadomienia"
_profile:
username: "Nazwa użytkownika"
_deck:
_columns:
notifications: "Powiadomienia"

View File

@@ -1,45 +1,894 @@
---
_lang_: "Русский язык"
_lang_: "Русский"
introMisskey: "Добро пожаловать! Misskey - это децентрализованный сервис микроблогов с открытым исходным кодом.\nСоздавайте «записи», чтобы поделиться происходящим или рассказать всем о себе 📡\nТакже Вы можете добавить быструю реакцию на все записи с помощью функции «реакция» 👍\nОткройте для себя новый мир 🚀"
monthAndDay: "{day}.{month}"
search: "Поиск"
notifications: "Уведомления"
username: "Имя пользователя"
password: "Пароль"
fetchingAsApObject: "Запрос на федерацию"
ok: "Окей"
gotIt: "Отлично"
cancel: "Отмена"
instance: "Экземпляр"
enterUsername: "Введите имя пользователя"
renotedBy: "{user} репостнул(а)"
noNotes: "Нет постов"
noNotifications: "Нет уведомлений"
instance: "Узел"
settings: "Настройки"
basicSettings: "Основное"
otherSettings: рочee"
openInWindow: "Открыть в окне"
profile: "Профиль"
timeline: "Лента"
noAccountDescription: "Описание отсутствует"
login: "Войти"
loggingIn: "Выполняется вход"
logout: "Выйти"
signup: "Регистрация"
uploading: "Загрузка..."
save: "Сохранить"
users: "Пользователи"
addUser: "Добавить пользователя"
favorite: "Избранное"
favorites: "Избранное"
unfavorite: "Удалить из избранных"
pin: "Закрепить"
unpin: "Открепить"
copyContent: "Скопировать содержимое"
copyLink: "Скопировать ссылку"
delete: "Удалить"
deleteAndEdit: "Удалить и отредактировать"
deleteAndEditConfirm: "Удалить этот пост и отредактировать заново? Все реакции, репосты и ответы на него также будут удалены."
addToList: "Добавить в список"
sendMessage: "Отправить сообщение"
copyUsername: "Скопировать имя пользователя"
searchUser: "Поиск людей"
reply: "Ответить"
loadMore: "Показать еще"
youGotNewFollower: "Новый подписчик"
receiveFollowRequest: "Запрос на подписку"
followRequestAccepted: "Запрос на подписку принят"
mention: "Упоминание"
mentions: "Упоминания"
directNotes: "Прямые сообщения"
importAndExport: "Импорт / Экспорт"
files: "Файл"
instances: "Экземпляр"
import: "Импорт"
export: "Экспорт"
files: "Файлы"
download: "Скачать"
driveFileDeleteConfirm: "Удалить файл {name} ? Посты с ним также будут удалены"
unfollowConfirm: "Удалить из подписок {name}?"
exportRequested: "Вы запросили экспорт. Это может занять некоторое время. По завершению результат будет добавлен на «Диск»."
importRequested: "Вы запросили импорт. Это может занять некоторое время."
lists: "Списки"
noLists: "Нет списков"
note: "Пост"
notes: "Посты"
following: "Подписки"
followers: "Подписчики"
followsYou: "Подписчики"
createList: "Создать список"
manageLists: "Управление списками"
error: "Ошибка"
somethingHappened: "Что-то пошло не так"
retry: "Повторить попытку"
pageLoadError: "Ошибка загрузки страницы"
pageLoadErrorDescription: "Обычно это вызвано сетевыми ошибками или кэшем браузера. Попробуйте очистить кэш, а затем попробуйте еще раз, немного подождав."
enterListName: "Введите имя списка"
privacy: "Приватность"
makeFollowManuallyApprove: "Подтверждать подписчиков вручную"
defaultNoteVisibility: "Видимость постов по умолчанию"
follow: "Подписки"
followRequest: "Запрос на подписку"
followRequests: "Запросы на подписку"
unfollow: "Отписаться"
followRequestPending: "Ожидающие запросы на подписку"
enterEmoji: "Введите эмодзи"
renote: "Репост"
unrenote: "Отмена репоста"
quote: "Цитата"
pinnedNote: "Закреплённый пост"
you: "Вы"
clickToShow: "Нажмите для просмотра"
sensitive: "NSFW"
add: "Добавить"
reaction: "Реакции"
reactionSettingDescription: "Выберите реакции для показа в селекторе реакций"
rememberNoteVisibility: "Запоминать видимость поста"
attachCancel: "Удалить вложение"
markAsSensitive: "Отметить как NSFW"
unmarkAsSensitive: "Снять отметку NSFW"
enterFileName: "Введите имя файла"
mute: "Скрыть"
unmute: "Показывать"
block: "Заблокировать"
unblock: "Разблокировать"
suspend: "Приостановить"
unsuspend: "Возобновить"
blockConfirm: "Заблокировать?"
unblockConfirm: "Разблокировать?"
suspendConfirm: "Приостановить?"
unsuspendConfirm: "Возобновить?"
selectList: "Выберите список"
selectAntenna: "Выберите антенну"
selectWidget: "Выберите виджет"
editWidgets: "Редактировать виджет"
editWidgetsExit: "Завершить"
customEmojis: "Кастомные эмодзи"
emoji: "Эмодзи"
emojiName: "Название эмодзи"
emojiUrl: "URL изображения"
addEmoji: "Добавить эмодзи"
settingGuide: "Рекомендуемые настройки"
cacheRemoteFiles: "Кешировать внешние файлы"
cacheRemoteFilesDescription: "Когда эта настройка отключена, удаленные файлы загружаются непосредственно из удаленного экземпляра. Отключение этого параметра уменьшит использование хранилища, но увеличит трафик, так как эскизы не будут генерироваться."
flagAsBot: "Учётка бота"
flagAsCat: "Учётка кота"
autoAcceptFollowed: "Принимать подписки автоматически"
addAcount: "Добавить учётку"
loginFailed: "Ошибка входа"
showOnRemote: "Посмотреть оригинал"
general: "Общее"
wallpaper: "Обои"
setWallpaper: "Установить обои"
removeWallpaper: "Удалить обои"
searchWith: "Искать в {q}"
youHaveNoLists: "Нет списков"
followConfirm: "Подписаться на {name}?"
proxyAccount: "Прокси аккаунт"
proxyAccountDescription: "Учетная запись прокси - это учетная запись, которая при определенных условиях действует в качестве удаленного последователя для пользователей. Например, когда пользователь добавляет удаленного пользователя в список, действия удаленного пользователя не будут доставляться экземпляру, если ни один локальный пользователь не следует за этим пользователем, поэтому вместо него будет действовать учетная запись прокси."
host: "Хост"
selectUser: "Выбор пользователя"
recipient: "Кому"
annotation: "Описание"
federation: "Федиверс"
instances: "Узел"
registeredAt: "Присоединился(ась)"
latestRequestSentAt: "Последний запрос отправлен"
latestRequestReceivedAt: "Последний запрос, поступивший по адресу"
latestStatus: "Последний статус"
storageUsage: "Использовано"
charts: "Диаграммы"
perHour: "Каждый час"
perDay: "Каждый день"
blockThisInstance: "Блокировать этот инстанс"
operations: "Операции"
software: "Программы"
version: "Версия"
metadata: "Метаданные"
withNFiles: "{n} файлов"
monitor: "Монитор"
jobQueue: "Очередь заданий"
cpuAndMemory: "CPU и память"
network: "Сеть"
disk: "Диск"
instanceInfo: "Информация об узле"
statistics: "Статистика"
clearQueue: "Очистить очередь"
clearQueueConfirmTitle: "Очистить очередь?"
clearQueueConfirmText: "Любые недоставленные записи, оставшиеся в очереди, не будут переданы. Обычно эта операция НЕ нужна."
clearCachedFiles: "Очистить кэш"
clearCachedFilesConfirm: "Хотите удалить все кешированные файлы?"
blockedInstances: "Заблокированные узлы"
blockedInstancesDescription: "Введите список узлов, которые хотите заблокировать. Они не смогут взаимодействовать с этим."
muteAndBlock: "Скрытие и блокировка"
mutedUsers: "Скрытые пользователи"
blockedUsers: "Заблокированные Пользователи"
noUsers: "Нет пользователей"
editProfile: "Изменить профиль"
noteDeleteConfirm: "Вы хотите удалить эту запись?"
pinLimitExceeded: "Превышен лимит"
intro: "Misskey установлен! Создайте учетную запись администратора"
done: "Завершено"
processing: "Обработка"
preview: "Превью"
default: "По умолчанию"
noCustomEmojis: "Нет эмодзи"
noJobs: "Нет заданий"
federating: "федеративный"
blocked: "Заблокировано"
suspended: "Приостановленный"
all: "Все"
subscribing: "Подписка"
publishing: "Публикация"
notResponding: "Нет ответа"
instanceFollowing: "Подписаться на инстанс"
instanceFollowers: "Подписчики инстанса"
instanceUsers: "Пользователи инстанса"
changePassword: "Изменить пароль"
security: "Безопасность"
retypedNotMatch: "Нет совпадений"
currentPassword: "Текущий пароль"
newPassword: "Новый пароль"
newPasswordRetype: "Новый пароль (повторно):"
attachFile: "Прикрепить файлы"
more: "Ещё!"
featured: "Рекомендуемые"
usernameOrUserId: "Имя пользователя или ID"
noSuchUser: "Пользователь не найден"
lookup: "Подписка"
announcements: "Уведомление"
imageUrl: "URL-адрес изображения"
remove: "Удалить"
removed: "Удалено"
removeAreYouSure: "Хочешь удалить \"{x}\"?"
saved: "Сохранено"
messaging: "Сообщения"
upload: "Загрузить"
fromDrive: "С диска"
fromUrl: "URL-адрес"
uploadFromUrl: "Загрузить по ссылке"
uploadFromUrlDescription: "URL-адрес файла, который вы хотите загрузить"
uploadFromUrlRequested: "Загрузить запрос"
uploadFromUrlMayTakeTime: "Загрузка может занять некоторое время."
explore: "Обзор"
games: "Игры Misskey"
messageRead: "Прочитанных"
noMoreHistory: "Истории больше нет"
startMessaging: "Отправить сообщение"
nUsersRead: "прочитано {n}"
agreeTo: "Я согласен с {0}"
tos: "Пользовательское соглашение"
start: "Начать"
home: "Главная"
remoteUserCaution: "Эта информация может быть неактуальной, так как пользователь является удаленным пользователем."
activity: "Активность"
images: "Изображение"
birthday: "День рождения"
yearsOld: "{age} лет"
registeredDate: "Дата регистрации"
location: "Местоположение"
theme: "Тема"
themeForLightMode: "Темы для использования в световом режиме"
themeForDarkMode: "Темы для использования в темном режиме"
light: "Светлый"
dark: "Тёмный"
lightThemes: "Светлые темы"
darkThemes: "Тёмные темы"
syncDeviceDarkMode: "Синхронизировать с темным режимом устройства"
drive: "Диск"
fileName: "Имя файла"
selectFile: "Выберите Файл"
selectFiles: "Выберите Файл"
selectFolder: "Выберите папку"
selectFolders: "Выберите папку"
renameFile: "Переименовать файл"
folderName: "Имя папки"
createFolder: "Создать папку"
renameFolder: "Переименовать папку"
deleteFolder: "Удалить папку"
addFile: "Добавить файл"
emptyDrive: "Диск пуст"
emptyFolder: "Папка пуста"
unableToDelete: "Удаление невозможно"
inputNewFileName: "Введите имя нового файла"
inputNewFolderName: "Пожалуйста, введите новое имя папки!"
circularReferenceFolder: "Конечная папка - это вложенная папка, которую вы хотите переместить."
hasChildFilesOrFolders: "Эта папка не пуста и не может быть удалена."
copyUrl: "Копировать URL"
rename: "Переименовать"
avatar: "Иконка"
banner: "Баннер"
nsfw: "NSFW"
whenServerDisconnected: "Когда соединение с сервером потеряно"
disconnectedFromServer: "Разорвано соединение с сервером"
reload: "Перезагрузить"
doNothing: "Ничего не делать"
reloadConfirm: "Подтвердить перезагрузку?"
watch: "Следить"
unwatch: "Отписаться"
accept: "Принять"
reject: "Отклонить"
normal: "Стабильно"
instanceName: "Имя экземпляра"
instanceDescription: "Описание инстанса"
maintainerName: "Имя администратора"
maintainerEmail: "email администратора"
tosUrl: "Пользовательское соглашение URL"
thisYear: "Текущий год"
thisMonth: "Текущий месяц"
today: "Сегодня"
dayX: "{day}дней"
monthX: "{month}месяц"
yearX: "{year}год"
pages: "Страница"
integration: "подключение"
connectSerice: "Соединение"
disconnectSerice: "Отключение"
enableLocalTimeline: "Включить локальную ленту"
enableGlobalTimeline: "Включить глобальную ленту"
disablingTimelinesInfo: "Администраторы и Модераторы всегда будут иметь доступ ко всем временным параметрам, даже если они не включены."
registration: "Регистрация"
enableRegistration: "Разрешить регистрацию"
invite: "Пригласить"
proxyRemoteFiles: "Удаленные файлы прокси"
proxyRemoteFilesDescription: "Если эта функция включена, удаленные файлы, которые (1) не хранятся локально или (2) были удалены с превышением лимита хранения, будут проксированы локально (с эскизами). Это не влияет на хранение на сервере."
driveCapacityPerLocalAccount: "Емкость диска для локального пользователя"
driveCapacityPerRemoteAccount: "Емкость диска для удаленного пользователя"
inMb: "В мегабайтах"
iconUrl: "URL-адрес иконки"
bannerUrl: "URL-адрес изображения баннера"
basicInfo: "Общая информация"
pinnedUsers: "Прикреплённый пользователь"
pinnedUsersDescription: "Перечислите по одному имени пользователя в строке. Пользователи, перечисленные здесь, будут привязаны к закладке \"Изучение\"."
hcaptcha: "hCaptcha"
enableHcaptcha: "Включить hCaptcha"
hcaptchaSiteKey: "Ключ сайта"
hcaptchaSecretKey: "Секретный ключ"
recaptcha: "reCAPTCHA"
enableRecaptcha: "Включить reCAPTCHA"
recaptchaSiteKey: "Ключ сайта"
recaptchaSecretKey: "Секретный ключ"
avoidMultiCaptchaConfirm: "Использование нескольких Captchas может вызвать помехи. Хотите отключить другую Captcha? Вы можете оставить несколько Captchas включенными, нажав \"Отмена\"."
antennas: "Антенны"
manageAntennas: "Настройки антенн"
name: "Имя"
antennaSource: "Источник антенны"
antennaKeywords: "Ключевые слова"
antennaExcludeKeywords: "Исключения"
antennaKeywordsDescription: "Разделяйте пробелами для условия \"И\". Разделяйте переводом строки для \"ИЛИ\"."
notifyAntenna: "Уведомлять о новых записях"
serviceworker: "ServiceWorker"
enableServiceworker: "Включить ServiceWorker"
caseSensitive: "С учётом регистра"
withReplies: "Включить ответы"
connectedTo: "Вы подключены к следующим аккаунтам"
notesAndReplies: "Посты и ответы"
withFiles: "с файлами"
silence: "Заглушить"
silenceConfirm: "Вы уверены, что хотите заглушить этого пользователя?"
unsilenceConfirm: "Ты уверен, что хочешь отменить глушение этого пользователя?"
popularUsers: "Популярные пользователи"
recentlyUpdatedUsers: "Недавно активные"
recentlyRegisteredUsers: "Недавно зарегистрированные пользователи"
recentlyDiscoveredUsers: "Недавно обнаруженные пользователи"
exploreUsersCount: "{count} пользователей"
exploreFediverse: "Исследуйте Fediverse"
popularTags: "Популярные теги"
userList: "Списки"
about: "Описание"
aboutMisskey: "О Misskey"
aboutMisskeyText: "Misskey - это программное обеспечение с открытым исходным кодом, разрабатываемое syuilo с 2014 года."
misskeyMembers: "В настоящее время он разрабатывается и поддерживается следующими членами:"
misskeySource: "Исходный код доступен здесь:"
misskeyTranslation: "Помогите нам перевести Misskey:"
misskeyDonate: "Вы можете поддержать развитие, пожертвовав Misskey:"
morePatrons: "Есть много других, кто поддержал нас. Спасибо 🥰."
patrons: "Поддержавшие"
administrator: "Администратор"
token: "Токен"
twoStepAuthentication: "Двухфакторная аутентификация"
moderator: "Модератор"
nUsersMentioned: "{n}указанные пользователи"
securityKey: "Ключ безопасности"
securityKeyName: "Имя ключа"
registerSecurityKey: "Зарегистрировать защитный ключ"
lastUsed: "Последнее использование"
unregister: "Отписаться"
resetPassword: "Сброс пароля:"
newPasswordIs: "Новый пароль - \"{пароль}\"."
autoNoteWatch: "Автоматически просматривать записи"
autoNoteWatchDescription: "Получать уведомления о заметках других пользователей, на которые вы отреагировали или на которые вы ответили."
reduceUiAnimation: "Уменьшить анимацию в пользовательском интерфейсе."
share: "Поделиться"
notFound: "Не найдено"
notFoundDescription: "Страница, соответствующая указанному URL, не найдена."
uploadFolder: "Место загрузки по умолчанию"
cacheClear: "Очистка кэша"
markAsReadAllNotifications: "Отметить все уведомления как прочитанные"
markAsReadAllUnreadNotes: "Отметьте все сообщения как прочитанные."
markAsReadAllTalkMessages: "Отметьте все сообщения как прочитанные"
help: "Помощь"
inputMessageHere: "Введите сообщение здесь"
close: "Закрыть"
group: "Группа"
groups: "Группы"
createGroup: "Создать группу"
ownedGroups: "Собственные группы"
joinedGroups: "Участие в группах"
invites: "Пригласить"
groupName: "Название группы"
members: "Участники"
transfer: "Перенос"
messagingWithUser: "Сообщения пользователей"
messagingWithGroup: "Чат в группе"
title: "Заголовок."
text: "Текст"
enable: "Включить."
next: "Следующий"
retype: "Введите повторно"
noteOf: "Посты {user}"
inviteToGroup: "Пригласить в группу"
maxNoteTextLength: "Максимальная длина текста"
quoteQuestion: "Хочешь добавить цитату?"
noMessagesYet: "Сообщений нет"
newMessageExists: "Новое сообщение"
onlyOneFileCanBeAttached: "К сообщению можно прикрепить только один файл."
signinRequired: "Пожалуйста, войдите."
invitationCode: "Код приглашения"
checking: "Проверка"
available: "Доступен"
unavailable: "Не доступно"
usernameInvalidFormat: "Вы можете использовать a-z, A-Z, 0-9 и _"
tooShort: "Слишком короткий"
tooLong: "Слишком длинный"
weakPassword: "Слабый пароль"
normalPassword: "Обычный пароль"
strongPassword: "Надёжный пароль"
passwordMatched: "Подходящий пароль"
passwordNotMatched: "Пароль не найден"
signinWith: "Войти в систему с помощью {x}"
signinFailed: "Невозможно войти в систему. Введенное вами имя пользователя или пароль неверны."
or: "или"
uiLanguage: "Язык интерфейса"
groupInvited: "Приглашение в группу"
aboutX: "Описание {x}"
useOsNativeEmojis: "Используйте родной для ОС Emojis"
youHaveNoGroups: "Группы не найдены"
joinOrCreateGroup: "Получите приглашение присоединиться к группам или вы можете создать свою собственную группу."
noHistory: "Ничего не найдено"
disableAnimatedMfm: "Отключение MFM в анимации"
doing: "В пути"
category: "Категория"
tags: "Теги"
docSource: "Источник документа"
createAccount: "Зарегистрироваться"
existingAcount: "У вас уже есть учетная запись?"
regenerate: "Восстановить"
fontSize: "Размер шрифта"
noFollowRequests: "У вас нет никаких ожидающих ответа запросов"
openImageInNewTab: "Открыть изображение в новой вкладке"
dashboard: "Панель управления"
local: "Локальный"
remote: "Удаленный"
total: "Всего"
weekOverWeekChanges: "Еженедельно"
dayOverDayChanges: "Ежедневно"
appearance: "Внешний вид"
clientSettings: "Настройки клиента"
accountSettings: "Настройки учетной записи"
promotion: "Опубликовано"
promote: "Продвинуть"
numberOfDays: "Количество дней"
hideThisNote: "Спрятать эту запись"
objectStorage: "Хранилище"
useObjectStorage: "Занято в хранилище"
objectStorageBaseUrl: "Базовый URL-адрес"
objectStorageBucket: "Bucket"
objectStoragePrefix: "Префикс"
objectStorageRegion: "Регион"
serverLogs: "Журнал сервера"
deleteAll: "Удалить всё"
sounds: "Звуки"
listen: "Слушать"
none: "Ничего"
showInPage: "Показать страницу"
popout: "Развернуть"
volume: "Громкость"
details: "Подробнее"
chooseEmoji: "Выберите эмодзи"
unableToProcess: "Я не могу завершить операцию."
recentUsed: "Последние использованные"
install: "Установить"
uninstall: "Удалить"
installedApps: "Установленные приложения"
nothing: "Ничего не найдено"
installedDate: "Дата установки"
lastUsedDate: "Дата использования"
state: "Состояние"
sort: "Сортировать"
ascendingOrder: "по возрастанию"
descendingOrder: "По убыванию"
scratchpad: "Редактор "
scratchpadDescription: "Scratchpad предоставляет экспериментальную среду для AiScript, позволяющую писать, запускать и проверять результаты кода, взаимодействующего с Misskey."
output: "Выходы"
script: "Скрипт"
disablePagesScript: "Отключение скриптов в Pages"
deleteAllFiles: "Удалить все файлы"
deleteAllFilesConfirm: "Вы хотите удалить все файлы?"
removeAllFollowing: "Удалить всех подписчиков"
userSuspended: "Этот пользователь был заморожен"
userSilenced: "Этот пользователь был заглушен"
sidebar: "Боковая панель"
divider: "Разделительная полоса"
addItem: "Добавить элемент"
rooms: "Комнаты"
relays: "Ретрансляторы"
addRelay: "Добавить ретранслятор"
addedRelays: "Добавленные ретрансляторы"
invisibleNote: "Личное сообщение"
visibility: "Видимость"
poll: "Опрос"
enablePlayer: "Включить плеер"
disablePlayer: "Выключить плеер"
themeEditor: "Редактор темы"
description: "Описание"
author: "Автор"
plugins: "Плагины"
permission: "Разрешения"
enableAll: "Включить все"
disableAll: "Выключить всё"
notificationType: "Тип уведомления"
edit: "Изменить"
emailConfig: "Настройки почтового сервера"
enableEmail: "Активировать функцию доставки электронной почты"
emailConfigInfo: "Он используется для подтверждения адреса электронной почты и сброса пароля."
email: "email"
smtpConfig: "Конфигурация SMTP-сервера"
smtpHost: "Хост"
smtpPort: "smtp порт"
smtpUser: "Имя пользователя"
smtpPass: "Пароль"
emptyToDisableSmtpAuth: "Вы можете отключить SMTP аутентификацию, оставив ваше имя пользователя и пароль пустыми"
smtpSecure: "Использовать SSL/TLS для SMTP-соединений"
smtpSecureInfo: "Выключите его при использовании STARTTLS."
testEmail: "Проверка Email"
wordMute: "Скрытие слов"
makeActive: "Активировать"
display: "Показать"
copy: "Копировать"
metrics: "Метрика"
overview: "Обзор"
logs: "Лог-файлы"
delayed: "Задержка"
database: "База данных"
channel: "каналы"
create: "Создать"
notificationSetting: "Настройки уведомлений"
notificationSettingDesc: "Выберите тип уведомлений для отображения"
useGlobalSetting: "Использовать глобальные настройки"
useGlobalSettingDesc: "Использовать глобальные настройки"
other: "Другие"
regenerateLoginToken: "Восстановить токен входа"
regenerateLoginTokenDescription: "Восстановите токен, используемый внутри во время входа. Обычно в этом нет необходимости. При восстановлении все устройства будут отключены."
setMultipleBySeparatingWithSpace: "Вы можете установить несколько, разделив их пробелами."
fileIdOrUrl: "ID файла или URL-адрес"
chatOpenBehavior: "Поведение окна чата при открытии"
sample: "Пример"
abuseReports: "Отчеты"
reportAbuse: "Отчеты"
fillAbuseReportDescription: "Пожалуйста, заполните данные отчета. Если речь идет о конкретном сообщении, пожалуйста, укажите его URL."
abuseReported: "Содержимое отправлено. Спасибо за сообщение"
send: "Отправить"
abuseMarkAsResolved: "Отметить отчет как решенный"
_serverDisconnectedBehavior:
reload: "Автоматическая перезагрузка"
dialog: "Предупреждение"
quiet: "Показать ненавязчивое предупреждение"
_channel:
create: "Создать канал"
edit: "Редактировать канал"
setBanner: "Установить баннер"
removeBanner: "Удалить баннер"
featured: "В тренде"
owned: "Владелец"
usersCount: "{n} Участники"
notesCount: "{n} Записи"
_sidebar:
full: "Полный"
icon: "Иконка"
hide: "Спрятать"
_wordMute:
muteWords: "Скрыть слово"
muteWordsDescription: "Разделяйте пробелами для условия \"И\". Разделяйте переводом строки для \"ИЛИ\"."
muteWordsDescription2: "Округляйте ключевые слова слэшами для использования регулярных выражений."
soft: "Лёгкий "
hard: "Сложный"
mutedNotes: "Скрытые посты"
_theme:
explore: "Обзор"
install: "Установить тему"
manage: "Менеджер тем"
code: "Код темы"
installed: "{name} установлено "
alreadyInstalled: "Тема уже установлена"
invalid: "Формат темы некорректный "
make: "Создать тему"
base: "База"
addConstant: "Добавить константу"
constant: "Константа"
defaultValue: "Значение по умолчанию"
color: "Цвет"
refConst: "Ссылка на константу"
key: "Ключ"
func: "Функции"
funcKind: "Тип функции"
argument: "Аргумент"
basedProp: "Указанное свойство"
alpha: "Непрозрачность"
darken: "Темный"
inputConstantName: "Введите имя для константы"
importInfo: "Если вы введете код темы здесь, вы можете импортировать его в редактор тем."
deleteConstantConfirm: "Вы действительно хотите удалить константу {const}?"
keys:
bg: "Справочная информация"
fg: "Текст"
navHoverFg: "Текст на боковой панели (Навести)"
link: "Ссылка"
hashtag: "Хэштеги"
mention: "Упоминание"
renote: "Репост"
divider: "Разделительная полоса"
infoBg: "Справочная информация"
infoFg: "Текст информации"
_sfx:
note: "Посты"
notification: "Уведомления"
chat: "Сообщения"
_ago:
secondsAgo: "{} секунд назад"
minutesAgo: "{} минут назад"
hoursAgo: "{} часов назад"
daysAgo: "{} дней назад"
weeksAgo: "{} недель назад"
monthsAgo: "{} месяцев назад"
yearsAgo: "{} лет назад"
_time:
second: "сек"
minute: "Мин."
_tutorial:
title: "Как пользоваться Misskey"
step1_1: "Добро пожаловать!"
step2_1: "Прежде чем создать заметку или следовать за кем-либо, сначала заполните свой профиль."
step3_1: "Вы хорошо подготовили свой профиль?"
step6_2: "Вы можете добавлять \"реакции\" к записям других людей, что облегчает общение с ними."
step6_3: "Чтобы добавить реакцию, нажмите на знак \"+\" в записке и выберите нужную реакцию."
step7_1: "На этом мы завершаем основные инструкции по использованию Misskey. Спасибо за вашу тяжёлую работу."
step7_2: "Если вы хотите узнать больше о Misskey, посмотрите в {хелп}."
_2fa:
alreadyRegistered: "Настройка завершена"
registerDevice: "Зарегистрируйте ваше устройство"
step1: "Во-первых, установите на устройство приложение для аутентификации, например, {a} или {b}."
step2: "Далее отсканируйте отображаемый QR-код при помощи приложения"
step3: "Введите токен, отображаемый в приложении, и все готово"
step4: "Когда вы войдете в систему, вы можете ввести свой токен тем же способом."
securityKeyInfo: "Вы можете настроить вход с помощью аппаратного ключа безопасности, поддерживающего FIDO2, или отпечатка пальца или PIN-кода на устройстве."
_permissions:
"read:account": "Просмотр информации об аккаунте"
"write:account": "Изменить информацию о вашем аккаунте"
"write:blocks": "Отредактируйте список людей, которых вы заблокировали"
"read:drive": "Доступ к файлам и папкам диска"
"write:drive": "Редактирование или удаление файлов и папок диска"
"read:favorites": "Просмотреть список избранных"
"write:favorites": "Редактирование списка избранных"
"read:messaging": "Просмотр сообщений"
"read:mutes": "Просмотр скрытых пользователей"
"write:mutes": "Изменение списка скрытых"
"read:notifications": "Просмотреть уведомления"
"write:reactions": "Редактировать реакции"
_weekday:
saturday: "Суббота"
_widgets:
memo: "Заметка"
notifications: "Уведомления"
timeline: "Лента"
calendar: "Календарь"
trends: "В тренде"
clock: "Часы"
rss: "Ридер RSS"
activity: "Активность"
photos: "Фото"
digitalClock: "Цифровые Часы"
federation: "Федиверс"
postForm: "Форма отправки"
_cw:
hide: "Спрятать"
show: "Показать еще"
chars: "{count} символов"
files: "{count} файлов"
_poll:
noOnlyOneChoice: "Нужно как минимум два варианта."
choiceN: "Выбрать{n}"
canMultipleVote: "Возможны несколько вариантов ответов"
expiration: "Истечение срока действия"
infinite: "Неограниченное количество"
deadlineDate: "Срок исполнения"
deadlineTime: "Длительность"
duration: "Продожительность"
totalVotes: "Всего {n} голосов"
vote: "Проголосовать"
showResult: "Смотреть результаты"
voted: "Проголосовали"
closed: "Завершено"
_visibility:
public: "Публичный"
publicDescription: "Открыт для всех пользователей"
home: "Главная"
followers: "Подписчики"
specifiedDescription: "Отправлять сообщения только указанным пользователям"
localOnly: "Только локально"
localOnlyDescription: "Не видно удаленным пользователям"
_postForm:
replyPlaceholder: "Ответьте на эту запись..."
quotePlaceholder: "Процитировать эту запись..."
channelPlaceholder: "Отправить в канал"
_placeholders:
a: "Что происходит?"
_profile:
name: "Имя"
username: "Имя пользователя"
metadataContent: "Содержание"
_exportOrImport:
allNotes: "Все записи\n"
followingList: "Подписки"
muteList: "Скрыть"
blockingList: "Заблокировать"
userLists: "Списки"
_timelines:
home: "Главная"
_rooms:
roomOf: "Комната {user}"
_roomType:
default: "По умолчанию"
_furnitures:
pencil: "Карандаш"
book: "Книга"
server: "Сервер"
monitor: "Монитор"
_pages:
title: "Заголовок."
url: "URL страницы"
hideTitleWhenPinned: "Скрыть заголовок страницы при привязке к профилю"
font: "Шрифт"
blocks:
section: "Раздел"
image: "Изображение"
button: "Кнопка"
if: "Если"
_if:
variable: "Переменная"
post: "Форма отправки"
_post:
text: "Содержание"
textInput: "Ввод текста"
_textInput:
name: "Имя переменной"
text: "Заголовок."
default: "Значение по умолчанию"
textareaInput: "Многострочный ввод текста"
_textareaInput:
name: "Имя переменной"
text: "Заголовок."
default: "Значение по умолчанию"
_numberInput:
name: "Имя переменной"
text: "Заголовок."
default: "Значение по умолчанию"
_switch:
name: "Имя переменной"
text: "Заголовок."
default: "Значение по умолчанию"
_counter:
name: "Имя переменной"
text: "Заголовок."
_button:
text: "Заголовок."
_action:
_dialog:
content: "Содержание"
_pushEvent:
no-variable: "Не найдено"
callAiScript: "Справка AiScript"
_callAiScript:
functionName: "Имя функции"
_radioButton:
name: "Имя переменной"
title: "Заголовок."
default: "Значение по умолчанию"
script:
categories:
list: "Списки"
blocks:
strLen: "Длина текста"
_strLen:
arg1: "Текст"
_strReplace:
arg1: "Текст"
_strReverse:
arg1: "Текст"
_join:
arg1: "Списки"
add: "Добавить"
_add:
arg1: "А"
arg2: "Б"
_subtract:
arg1: "А"
arg2: "Б"
_multiply:
arg1: "А"
arg2: "Б"
_divide:
arg1: "А"
arg2: "Б"
_mod:
arg1: "А"
arg2: "Б"
_eq:
arg1: "А"
arg2: "Б"
_notEq:
arg1: "А"
arg2: "Б"
_and:
arg1: "А"
arg2: "Б"
_or:
arg1: "А"
arg2: "Б"
_lt:
arg1: "А"
arg2: "Б"
_gt:
arg1: "А"
arg2: "Б"
_ltEq:
arg1: "А"
arg2: "Б"
_gtEq:
arg1: "А"
arg2: "Б"
_if:
arg1: "Если"
_rannum:
arg2: "Максимальное значение"
randomPick: "Случайный выбор из списка"
_randomPick:
arg1: "Списки"
_dailyRandom:
arg1: "Вероятность"
_dailyRannum:
arg2: "Максимальное значение"
_dailyRandomPick:
arg1: "Списки"
_seedRannum:
arg3: "Максимальное значение"
_seedRandomPick:
arg2: "Списки"
pick: "Выберите из списка"
_pick:
arg1: "Списки"
arg2: "Расположение"
_listLen:
arg1: "Списки"
number: "Номер"
_stringToNumber:
arg1: "Текст"
_numberToString:
arg1: "Номер"
ref: "Переменная"
aiScriptVar: "Переменная AiScript"
fn: "функции"
_fn:
slots: "Слоты"
_for:
arg1: "Количество повторений"
types:
array: "Списки"
_notification:
youWereFollowed: "Новый подписчик"
youReceivedFollowRequest: "Запрос на подписку"
youWereInvitedToGroup: "Приглашение в группу"
_types:
follow: "Подписки"
mention: "Упоминание"
renote: "Репост"
quote: "Цитата"
reaction: "Реакции"
app: "Уведомления из приложений"
_deck:
alwaysShowMainColumn: "Всегда показывать главную колонку"
columnAlign: "Выравнивание колонн"
addColumn: "Добавить колонку"
swapLeft: "Переместить влево"
swapRight: "Переместить вправо"
swapUp: "Поднять вверх"
swapDown: "Переместить Вниз"
_columns:
widgets: "Виджеты"
notifications: "Уведомления"
tl: "Лента"
antenna: "Антенны"
list: "Списки"
mentions: "Упоминания"

View File

@@ -16,6 +16,9 @@ noNotes: "没有帖文"
noNotifications: "无通知"
instance: "实例"
settings: "设置"
basicSettings: "基本设置"
otherSettings: "其他设置"
openInWindow: "在新窗口中打开"
profile: "个人资料"
timeline: "时间线"
noAccountDescription: "这个人很懒,没有写自我介绍"
@@ -40,6 +43,7 @@ deleteAndEditConfirm: "要删除此帖并再次编辑吗?对此帖的所有回
addToList: "添加至列表"
sendMessage: "发送"
copyUsername: "复制用户名"
searchUser: "搜索用户"
reply: "回复"
loadMore: "查看更多"
youGotNewFollower: "你有新的关注者"
@@ -66,8 +70,11 @@ followers: "关注者"
followsYou: "关注了你"
createList: "创建列表"
manageLists: "管理列表"
error: "有点小问题"
error: "错误"
somethingHappened: "出现了问题"
retry: "重试"
pageLoadError: "页面加载失败。"
pageLoadErrorDescription: "这通常是由于网络或浏览器缓存的原因。请清除缓存或等待片刻后重试。"
enterListName: "输入列表名称"
privacy: "隐私"
makeFollowManuallyApprove: "关注者请求需要批准"
@@ -106,6 +113,8 @@ unsuspendConfirm: "要解除冻结吗?"
selectList: "选择列表"
selectAntenna: "天线选择"
selectWidget: "选择小工具"
editWidgets: "编辑小工具"
editWidgetsExit: "完成编辑"
customEmojis: "自定义Emoji"
emoji: "表情符号"
emojiName: "Emoji 名称"
@@ -177,7 +186,6 @@ processing: "处理中"
preview: "预览"
default: "默认"
noCustomEmojis: "无自定义Emoji"
customEmojisOfRemote: "远程Emoji"
noJobs: "没有任务"
federating: "联合中"
blocked: "已拦截"
@@ -286,7 +294,7 @@ dayX: "{day}日"
monthX: "{month}月"
yearX: "{year}年"
pages: "页面"
integration: "连携"
integration: "关联"
connectSerice: "已连接"
disconnectSerice: "断开连接"
enableLocalTimeline: "启用本地时间线功能"
@@ -445,7 +453,7 @@ total: "总计"
weekOverWeekChanges: "与前一周相比"
dayOverDayChanges: "与前一日相比"
appearance: "外观"
clinetSettings: "客户端设置"
clientSettings: "客户端设置"
accountSettings: "账户设置"
promotion: "推广"
promote: "推广"
@@ -476,6 +484,8 @@ newNoteRecived: "有新的帖子"
sounds: "声音"
listen: "听"
none: "空"
showInPage: "在页面中显示"
popout: "弹窗"
volume: "音量"
details: "详情"
chooseEmoji: "选择表情符号"
@@ -518,7 +528,6 @@ enableInfiniteScroll: "启用自动滚动页面模式"
visibility: "可见性"
poll: "调查问卷"
useCw: "隐藏内容"
fixedWidgetsPosition: "固定小工具的位置"
enablePlayer: "打开播放器"
disablePlayer: "关闭播放器"
expandTweet: "展开推文"
@@ -566,6 +575,24 @@ delayed: "延迟"
database: "数据库"
channel: "频道"
create: "创建"
notificationSetting: "通知设置"
notificationSettingDesc: "选择要显示的通知类型。"
useGlobalSetting: "使用全局设置"
useGlobalSettingDesc: "启用时,将使用帐户通知设置。关闭时,则可以单独设置。"
other: "其他"
regenerateLoginToken: "重新生成登录令牌"
regenerateLoginTokenDescription: "重新生成用于登录的内部令牌。通常您不需要这样做。重新生成后,您将在所有设备上登出。"
setMultipleBySeparatingWithSpace: "您可以使用空格分隔多个项目。"
fileIdOrUrl: "文件ID或者URL"
chatOpenBehavior: "聊天窗口打开时的行为"
sample: "示例"
abuseReports: "举报"
reportAbuse: "举报"
reportAbuseOf: "举报{name}"
fillAbuseReportDescription: "请填写举报的详细原因。如果有对方发的帖子请同时填写URL地址。"
abuseReported: "内容已发送。感谢您的报告。"
send: "发送"
abuseMarkAsResolved: "处理完毕"
_serverDisconnectedBehavior:
reload: "自动重载"
dialog: "对话框警告"
@@ -782,6 +809,7 @@ _widgets:
photos: "照片"
digitalClock: "数字时钟"
federation: "联邦宇宙"
postForm: "投稿窗口"
_cw:
hide: "隐藏"
show: "查看更多"
@@ -1244,8 +1272,11 @@ _notification:
renote: "转发"
quote: "引用"
reaction: "回应"
pollVote: "投票"
receiveFollowRequest: "关注请求"
pollVote: "问卷调查已投票"
receiveFollowRequest: "收到关注请求"
followRequestAccepted: "关注请求已接受"
groupInvited: "加入群组邀请"
app: "关联应用的通知"
_deck:
alwaysShowMainColumn: "总是显示主列"
columnAlign: "列对齐"

View File

@@ -1,5 +1,5 @@
---
_lang_: "中文(繁體)"
_lang_: "繁體中文"
introMisskey: "歡迎! Misskey是一個開源的去中心化的社群網站。\n通過「貼文」來分享現在發生的事情吧 📡\n「反應」功能可以讓你快速的對大家的「帖子」來表達感情👍\n一起來探索新的世界吧 🚀"
monthAndDay: "{month}月 {day}日"
search: "搜尋"
@@ -11,11 +11,14 @@ ok: "確定"
gotIt: "知道了"
cancel: "取消"
enterUsername: "輸入使用者名稱"
renotedBy: "{user}轉發"
renotedBy: "{user} 轉發"
noNotes: "貼文不可用。"
noNotifications: "沒有通知"
instance: "實例"
settings: "設定"
basicSettings: "基本設定"
otherSettings: "其他設定"
openInWindow: "在新視窗開啟"
profile: "個人檔案"
timeline: "時間軸"
noAccountDescription: "此用戶還沒有自我介紹"
@@ -40,6 +43,7 @@ deleteAndEditConfirm: "要刪除並再次編輯嗎?此貼文的所有反應,
addToList: "添加至清單"
sendMessage: "發送訊息"
copyUsername: "複製用戶名"
searchUser: "搜尋用戶"
reply: "回覆"
loadMore: "瀏覽更多"
youGotNewFollower: "您有新的追隨者"
@@ -66,8 +70,10 @@ followers: "追隨者"
followsYou: "追隨你的人"
createList: "建立清單"
manageLists: "管理清單"
error: "發生錯誤"
error: "錯誤"
somethingHappened: "發生錯誤"
retry: "重試"
pageLoadError: "載入頁面失敗"
enterListName: "輸入清單名稱"
privacy: "隱私"
makeFollowManuallyApprove: "手動審核追隨請求"
@@ -106,13 +112,15 @@ unsuspendConfirm: "確定解凍此帳號?"
selectList: "選擇清單"
selectAntenna: "選擇天線"
selectWidget: "選擇小工具"
editWidgets: "編輯小工具"
editWidgetsExit: "停止編輯"
customEmojis: "自訂表情符號"
emoji: "表情符號"
emojiName: "表情符號名稱"
emojiUrl: "表情符號URL"
addEmoji: "新增表情符號"
settingGuide: "推薦設定"
cacheRemoteFiles: "遠程文件緩存"
cacheRemoteFiles: "緩存非遠程檔案"
cacheRemoteFilesDescription: "如果禁用此設定,遠程文件將會被直接連結而非緩存。禁用將節省服務器上的存儲空間,但會因為沒有生成預覽圖而增加流量。"
flagAsBot: "此帳戶是Bot"
flagAsCat: "此帳戶是Cat"
@@ -176,7 +184,6 @@ processing: "處理中"
preview: "預覽"
default: "預設"
noCustomEmojis: "沒有表情符號"
customEmojisOfRemote: "來自其他實例的表情符號"
noJobs: "沒有任務"
federating: "整合搜索中"
blocked: "已封鎖"
@@ -223,7 +230,7 @@ nUsersRead: "{n}人已讀"
tos: "使用條款"
start: "開始"
home: "首頁"
remoteUserCaution: "由於是遠程用戶,信息不完整。"
remoteUserCaution: "由於該用戶來自遠端實例,因此資料用戶並未即時更新。"
activity: "動態"
images: "圖片"
birthday: "生日"
@@ -293,7 +300,7 @@ disablingTimelinesInfo: "即使您禁用了時間線功能,管理員和協調
registration: "註冊"
enableRegistration: "開啟新用戶註冊"
invite: "邀請"
proxyRemoteFiles: "代理遠程檔案"
proxyRemoteFiles: "遠端代理檔案"
proxyRemoteFilesDescription: "啟用此設置後,由於超出存儲容量而未保存或刪除的遠程文件將被本地代理,並且將生成預覽圖。這不影響服務器的存儲。"
driveCapacityPerLocalAccount: "每個本地用戶的雲端容量"
driveCapacityPerRemoteAccount: "每個非本地用戶的雲端容量"
@@ -316,7 +323,7 @@ antennas: "天線"
manageAntennas: "管理天線"
name: "名稱"
antennaSource: "接收來源"
antennaKeywords: "包含關鍵字"
antennaKeywords: "包含關鍵字"
antennaExcludeKeywords: "排除關鍵字"
antennaKeywordsDescription: "用空格分隔指定AND、用換行符分隔指定OR"
notifyAntenna: "通知我有新的貼文"
@@ -430,12 +437,23 @@ category: "類別"
tags: "標籤"
docSource: "文件來源"
createAccount: "建立帳戶"
existingAcount: "現有帳戶"
regenerate: "再生"
fontSize: "字體大小"
openImageInNewTab: "於新分頁中開啟圖片"
local: "本地"
remote: "遠端"
total: "合計"
clinetSettings: "用戶端設定"
appearance: "外觀"
accountSettings: "帳戶設置"
objectStoragePrefix: "前綴"
objectStorageUseSSL: "使用SSL"
objectStorageUseProxy: "使用網路代理"
serverLogs: "伺服器日誌"
deleteAll: "刪除所有記錄"
sounds: "音效"
none: "無"
showInPage: "在頁面中顯示"
volume: "音量"
details: "詳細資訊"
chooseEmoji: "選擇您的表情符號\n"
@@ -443,14 +461,21 @@ unableToProcess: "操作無法完成"
recentUsed: "最近使用"
install: "安裝"
uninstall: "解除安裝"
installedApps: "已授權的應用程式"
nothing: "未發現"
installedDate: "安裝時間"
lastUsedDate: "最後上線日期"
state: "狀態"
sort: "排序"
ascendingOrder: "昇冪"
descendingOrder: "降冪"
scratchpad: "暫存記憶體"
output: "輸出"
script: "腳本"
updateRemoteUser: "更新非本地用戶資料"
deleteAllFiles: "刪除所有檔案"
deleteAllFilesConfirm: "要删除所有檔案吗?"
removeAllFollowing: "解除所有追隨"
userSuspended: "該用戶已被凍結"
userSilenced: "該用戶已被禁言。"
sidebar: "側邊列"
@@ -468,7 +493,6 @@ enableInfiniteScroll: "啟用自動滾動頁面模式"
visibility: "公開範圍"
poll: "投票"
useCw: "隱藏內容"
fixedWidgetsPosition: "固定小工具的位置"
enablePlayer: "打開播放器"
disablePlayer: "關閉播放器"
expandTweet: "展開推文"
@@ -497,8 +521,15 @@ smtpHost: "主機"
smtpPort: "端口"
smtpUser: "使用名稱"
smtpPass: "密碼"
display: "檢視"
copy: "複製"
metrics: "指標"
logs: "日誌"
delayed: "延遲"
database: "資料庫"
channel: "頻道"
create: "新增"
notificationSetting: "管理通知"
_serverDisconnectedBehavior:
reload: "自動重載"
dialog: "以對話框警告"
@@ -515,12 +546,19 @@ _channel:
notesCount: "有{n}個帖子"
_sidebar:
icon: "頭像"
hide: "隱藏"
_wordMute:
muteWords: "加入靜音文字"
_theme:
color: "顏色"
func: "函数"
keys:
bg: "背景"
mention: "提及"
renote: "轉發貼文"
divider: "分割線"
infoBg: "資訊背景"
infoFg: "資訊內容"
_sfx:
note: "貼文"
noteMy: "我的貼文"
@@ -579,6 +617,8 @@ _permissions:
"write:votes": "投票"
"read:channels": "已查看的頻道"
"write:channels": "操作頻道"
_antennaSources:
all: "全部貼文"
_weekday:
sunday: "週日"
monday: "週一"
@@ -588,33 +628,53 @@ _weekday:
friday: "週五"
saturday: "週六"
_widgets:
memo: "備忘錄"
notifications: "通知"
timeline: "時間軸"
calendar: "行事曆"
trends: "發燒貼文"
clock: "時鐘"
rss: "RSS閱讀器"
activity: "動態"
photos: "照片"
digitalClock: "電子時鐘"
federation: "聯邦宇宙"
_cw:
hide: "隱藏"
show: "瀏覽更多"
chars: "{count}字元"
files: "{count} 個檔案"
_poll:
noOnlyOneChoice: "至少需要兩個選項。"
expiration: "期限"
infinite: "無期限"
deadlineDate: "截止日期"
deadlineTime: "小時"
votesCount: "{n}票"
totalVotes: "一共{n}票"
vote: "投票"
showResult: "顯示結果"
voted: "已投票"
closed: "已結束"
_visibility:
home: "首頁"
followers: "追隨者"
localOnly: "僅限本地"
_postForm:
channelPlaceholder: "發佈到頻道"
_profile:
name: "名稱"
username: "使用名稱"
metadataLabel: "標籤"
metadataContent: "内容"
_exportOrImport:
allNotes: "全部貼文"
followingList: "追隨中"
muteList: "消音"
blockingList: "封鎖"
userLists: "清單"
_charts:
remoteNotesIncDec: "非本地貼文的數目增减"
_instanceCharts:
cacheSize: "增加或減少快取用量"
cacheSizeTotal: "快取大小總計"
@@ -632,6 +692,8 @@ _pages:
unlike: "收回喜歡"
blocks:
image: "圖片"
_post:
text: "内容"
_textareaInput:
name: "變數名稱"
numberInput: "輸入數值"
@@ -643,6 +705,9 @@ _pages:
text: "標題"
_button:
text: "標題"
_action:
_dialog:
content: "内容"
script:
categories:
value: "數值 "
@@ -782,6 +847,7 @@ _relayStatus:
accepted: "已通過核准"
rejected: "已拒絕"
_notification:
youRenoted: "{name} 轉發了你的貼文"
youGotPoll: "{name}已投票"
youWereFollowed: "您有新的追隨者"
yourFollowRequestAccepted: "您的追隨請求已通過"

View File

@@ -0,0 +1,32 @@
import {MigrationInterface, QueryRunner} from "typeorm";
export class refineAbuseUserReport1603094348345 implements MigrationInterface {
name = 'refineAbuseUserReport1603094348345'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP CONSTRAINT "FK_d049123c413e68ca52abe734203"`);
await queryRunner.query(`DROP INDEX "IDX_d049123c413e68ca52abe73420"`);
await queryRunner.query(`DROP INDEX "IDX_5cd442c3b2e74fdd99dae20243"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" RENAME COLUMN "userId" TO "targetUserId"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD "assigneeId" character varying(32)`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD "resolved" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP COLUMN "comment"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD "comment" character varying(2048) NOT NULL`);
await queryRunner.query(`CREATE INDEX "IDX_2b15aaf4a0dc5be3499af7ab6a" ON "abuse_user_report" ("resolved") `);
await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD CONSTRAINT "FK_08b883dd5fdd6f9c4c1572b36de" FOREIGN KEY ("assigneeId") REFERENCES "user"("id") ON DELETE SET NULL ON UPDATE NO ACTION`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP CONSTRAINT "FK_08b883dd5fdd6f9c4c1572b36de"`);
await queryRunner.query(`DROP INDEX "IDX_2b15aaf4a0dc5be3499af7ab6a"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP COLUMN "comment"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD "comment" character varying(512) NOT NULL`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP COLUMN "resolved"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP COLUMN "assigneeId"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" RENAME COLUMN "targetUserId" TO "userId"`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_5cd442c3b2e74fdd99dae20243" ON "abuse_user_report" ("userId", "reporterId") `);
await queryRunner.query(`CREATE INDEX "IDX_d049123c413e68ca52abe73420" ON "abuse_user_report" ("userId") `);
await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD CONSTRAINT "FK_d049123c413e68ca52abe734203" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
}
}

View File

@@ -0,0 +1,20 @@
import {MigrationInterface, QueryRunner} from "typeorm";
export class refineAbuseUserReport21603095701770 implements MigrationInterface {
name = 'refineAbuseUserReport21603095701770'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD "targetUserHost" character varying(128)`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD "reporterHost" character varying(128)`);
await queryRunner.query(`CREATE INDEX "IDX_4ebbf7f93cdc10e8d1ef2fc6cd" ON "abuse_user_report" ("targetUserHost") `);
await queryRunner.query(`CREATE INDEX "IDX_f8d8b93740ad12c4ce8213a199" ON "abuse_user_report" ("reporterHost") `);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP INDEX "IDX_f8d8b93740ad12c4ce8213a199"`);
await queryRunner.query(`DROP INDEX "IDX_4ebbf7f93cdc10e8d1ef2fc6cd"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP COLUMN "reporterHost"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP COLUMN "targetUserHost"`);
}
}

View File

@@ -1,7 +1,7 @@
{
"name": "misskey",
"author": "syuilo <syuilotan@yahoo.co.jp>",
"version": "12.48.3",
"version": "12.49.1",
"codename": "indigo",
"repository": {
"type": "git",
@@ -46,7 +46,7 @@
"@koa/multer": "3.0.0",
"@koa/router": "9.0.1",
"@sinonjs/fake-timers": "6.0.1",
"@syuilo/aiscript": "0.11.0",
"@syuilo/aiscript": "0.11.1",
"@types/bcryptjs": "2.4.2",
"@types/bull": "3.14.0",
"@types/cbor": "5.0.1",
@@ -92,7 +92,7 @@
"@types/request-stats": "3.0.0",
"@types/rimraf": "3.0.0",
"@types/seedrandom": "2.4.28",
"@types/sharp": "0.25.0",
"@types/sharp": "0.26.0",
"@types/sinonjs__fake-timers": "6.0.1",
"@types/speakeasy": "2.0.5",
"@types/tinycolor2": "1.4.2",
@@ -104,7 +104,7 @@
"@types/websocket": "1.0.1",
"@types/ws": "7.2.7",
"@typescript-eslint/parser": "4.4.0",
"@vue/compiler-sfc": "3.0.0",
"@vue/compiler-sfc": "3.0.2",
"abort-controller": "3.0.0",
"apexcharts": "3.22.0",
"autobind-decorator": "2.4.0",
@@ -123,19 +123,19 @@
"content-disposition": "0.5.3",
"core-js": "3.6.5",
"crc-32": "1.2.0",
"css-loader": "4.3.0",
"css-loader": "5.0.0",
"cssnano": "4.1.10",
"dateformat": "3.0.3",
"deep-entries": "3.1.0",
"diskusage": "1.1.3",
"double-ended-queue": "2.1.0-0",
"escape-regexp": "0.0.1",
"eslint": "7.10.0",
"eslint-plugin-vue": "7.0.1",
"eslint": "7.11.0",
"eslint-plugin-vue": "7.1.0",
"eventemitter3": "4.0.7",
"feed": "4.2.1",
"fibers": "5.0.0",
"file-type": "15.0.1",
"file-type": "16.0.0",
"fluent-ffmpeg": "2.1.2",
"glob": "7.1.6",
"got": "11.7.0",
@@ -159,8 +159,8 @@
"js-yaml": "3.14.0",
"jsdom": "16.4.0",
"json5": "2.1.3",
"json5-loader": "4.0.0",
"jsonld": "3.1.1",
"json5-loader": "4.0.1",
"jsonld": "3.2.0",
"jsrsasign": "8.0.20",
"katex": "0.12.0",
"koa": "2.13.0",
@@ -190,9 +190,9 @@
"parsimmon": "1.16.0",
"pg": "8.4.1",
"portscanner": "2.2.0",
"postcss": "8.1.1",
"postcss-loader": "4.0.3",
"prismjs": "1.21.0",
"postcss": "8.1.2",
"postcss-loader": "4.0.4",
"prismjs": "1.22.0",
"probe-image-size": "5.0.0",
"promise-limit": "2.7.0",
"promise-sequential": "1.1.1",
@@ -202,8 +202,8 @@
"qrcode": "1.4.4",
"random-seed": "0.3.0",
"ratelimiter": "3.4.1",
"re2": "1.15.5",
"recaptcha-promise": "0.1.3",
"re2": "1.15.8",
"recaptcha-promise": "1.0.0",
"reconnecting-websocket": "4.4.0",
"redis": "3.0.2",
"redis-lock": "0.1.4",
@@ -216,12 +216,12 @@
"rndstr": "1.0.0",
"s-age": "1.1.2",
"sass": "1.27.0",
"sass-loader": "10.0.2",
"sass-loader": "10.0.3",
"seedrandom": "3.0.5",
"sharp": "0.26.1",
"sharp": "0.26.2",
"speakeasy": "2.0.0",
"stringz": "2.1.0",
"style-loader": "1.3.0",
"style-loader": "2.0.0",
"summaly": "2.4.0",
"syslog-pro": "1.0.0",
"systeminformation": "4.27.8",
@@ -230,32 +230,31 @@
"three": "0.117.1",
"tinycolor2": "1.4.2",
"tmp": "0.2.1",
"ts-loader": "8.0.4",
"ts-loader": "8.0.6",
"ts-node": "9.0.0",
"tslint": "6.1.3",
"tslint-sonarts": "1.9.0",
"typeorm": "0.2.28",
"typescript": "4.0.3",
"ulid": "2.3.0",
"url-loader": "4.1.0",
"url-loader": "4.1.1",
"uuid": "8.3.1",
"v-debounce": "0.1.2",
"vue": "3.0.1",
"vue": "3.0.2",
"vue-color": "2.7.1",
"vue-draggable-next": "1.0.8",
"vue-i18n": "9.0.0-beta.4",
"vue-i18n": "9.0.0-beta.6",
"vue-json-pretty": "1.7.0",
"vue-loader": "16.0.0-beta.7",
"vue-loader": "16.0.0-beta.8",
"vue-prism-editor": "1.2.2",
"vue-router": "4.0.0-beta.13",
"vue-style-loader": "4.1.2",
"vue-svg-inline-loader-corejs3": "1.5.0",
"vue-template-compiler": "2.6.12",
"vuex": "4.0.0-beta.4",
"vuex-persistedstate": "3.1.0",
"web-push": "3.4.4",
"webpack": "5.1.3",
"webpack-cli": "3.3.12",
"webpack-cli": "4.1.0",
"websocket": "1.0.32",
"ws": "7.3.1",
"xev": "2.0.1"

View File

@@ -0,0 +1,85 @@
<template>
<XWindow ref="window" :initial-width="400" :initial-height="500" :can-resize="true" @closed="$emit('closed')">
<template #header>
<Fa :icon="faExclamationCircle" style="margin-right: 0.5em;"/>
<i18n-t keypath="reportAbuseOf" tag="span">
<template #name>
<b><MkAcct :user="user"/></b>
</template>
</i18n-t>
</template>
<div class="dpvffvvy">
<div class="_section">
<div class="_content">
<MkTextarea v-model:value="comment">
<span>{{ $t('details') }}</span>
<template #desc>{{ $t('fillAbuseReportDescription') }}</template>
</MkTextarea>
</div>
</div>
<div class="_section">
<div class="_content">
<MkButton @click="send" primary full :disabled="comment.length === 0">{{ $t('send') }}</MkButton>
</div>
</div>
</div>
</XWindow>
</template>
<script lang="ts">
import { defineComponent, markRaw } from 'vue';
import { faExclamationCircle } from '@fortawesome/free-solid-svg-icons';
import XWindow from '@/components/ui/window.vue';
import MkTextarea from '@/components/ui/textarea.vue';
import MkButton from '@/components/ui/button.vue';
import * as os from '@/os';
export default defineComponent({
components: {
XWindow,
MkTextarea,
MkButton,
},
props: {
user: {
type: Object,
required: true,
},
initialComment: {
type: String,
required: false,
},
},
emits: ['closed'],
data() {
return {
comment: this.initialComment || '',
faExclamationCircle,
};
},
methods: {
send() {
os.apiWithDialog('users/report-abuse', {
userId: this.user.id,
comment: this.comment,
}, undefined, res => {
os.dialog({
type: 'success',
text: this.$t('abuseReported')
});
this.$refs.window.close();
});
}
},
});
</script>
<style lang="scss" scoped>
.dpvffvvy {
--section-padding: 16px;
}
</style>

View File

@@ -1,102 +0,0 @@
<template>
<div class="eqryymyo">
<div class="header">
<time ref="time" class="_ghost">
<span class="yyyymmdd">{{ yyyy }}/{{ mm }}/{{ dd }}</span>
<br>
<span class="hhnn">{{ hh }}<span :style="{ visibility: now.getSeconds() % 2 == 0 ? 'visible' : 'hidden' }">:</span>{{ nn }}</span>
</time>
</div>
<div class="content _panel _ghost">
<MkClock/>
</div>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import MkClock from './analog-clock.vue';
import * as os from '@/os';
export default defineComponent({
components: {
MkClock
},
data() {
return {
now: new Date(),
clock: null
};
},
computed: {
yyyy(): number {
return this.now.getFullYear();
},
mm(): string {
return ('0' + (this.now.getMonth() + 1)).slice(-2);
},
dd(): string {
return ('0' + this.now.getDate()).slice(-2);
},
hh(): string {
return ('0' + this.now.getHours()).slice(-2);
},
nn(): string {
return ('0' + this.now.getMinutes()).slice(-2);
}
},
mounted() {
this.tick();
this.clock = setInterval(this.tick, 1000);
},
beforeUnmount() {
clearInterval(this.clock);
},
methods: {
tick() {
this.now = new Date();
}
}
});
</script>
<style lang="scss" scoped>
.eqryymyo {
display: inline-block;
overflow: visible;
> .header {
padding: 0 12px;
padding-top: 4px;
text-align: center;
font-size: 12px;
font-family: Lucida Console, Courier, monospace;
&:hover + .content {
opacity: 1;
}
> time {
display: table-cell;
vertical-align: middle;
height: 48px;
> .yyyymmdd {
opacity: 0.7;
}
}
}
> .content {
opacity: 0;
display: block;
position: absolute;
top: auto;
right: 0;
margin: 16px 0 0 0;
padding: 16px;
width: 230px;
transition: opacity 0.2s ease;
}
}
</style>

View File

@@ -101,7 +101,7 @@
<script lang="ts">
import { computed, defineAsyncComponent, defineComponent, markRaw, ref } from 'vue';
import { faSatelliteDish, faBolt, faTimes, faBullhorn, faStar, faLink, faExternalLinkSquareAlt, faPlus, faMinus, faRetweet, faReply, faReplyAll, faEllipsisH, faHome, faUnlock, faEnvelope, faThumbtack, faBan, faQuoteRight, faInfoCircle, faBiohazard, faPlug } from '@fortawesome/free-solid-svg-icons';
import { faSatelliteDish, faBolt, faTimes, faBullhorn, faStar, faLink, faExternalLinkSquareAlt, faPlus, faMinus, faRetweet, faReply, faReplyAll, faEllipsisH, faHome, faUnlock, faEnvelope, faThumbtack, faBan, faQuoteRight, faInfoCircle, faBiohazard, faPlug, faExclamationCircle } from '@fortawesome/free-solid-svg-icons';
import { faCopy, faTrashAlt, faEdit, faEye, faEyeSlash } from '@fortawesome/free-regular-svg-icons';
import { parse } from '../../mfm/parse';
import { sum, unique } from '../../prelude/array';
@@ -637,6 +637,21 @@ export default defineComponent({
}]
: []
),
...(this.appearNote.userId != this.$store.state.i.id ? [
null,
{
icon: faExclamationCircle,
text: this.$t('reportAbuse'),
action: () => {
const u = `${url}/notes/${this.appearNote.id}`;
os.popup(defineAsyncComponent(() => import('@/components/abuse-report-window.vue')), {
user: this.appearNote.user,
initialComment: `Note: ${u}\n-----\n`
}, {}, 'closed');
}
}]
: []
),
...(this.appearNote.userId == this.$store.state.i.id || this.$store.state.i.isModerator || this.$store.state.i.isAdmin ? [
null,
this.appearNote.userId == this.$store.state.i.id ? {

View File

@@ -7,7 +7,7 @@
<button class="_button" @click="expand" v-tooltip="$t('showInPage')"><Fa :icon="faExpandAlt"/></button>
<button class="_button" @click="popout" v-tooltip="$t('popout')"><Fa :icon="faExternalLinkAlt"/></button>
</template>
<div style="min-height: 100%; background: var(--bg);">
<div class="yrolvcoq" style="min-height: 100%; background: var(--bg);">
<component :is="component" v-bind="props" :ref="changePage"/>
</div>
</XWindow>
@@ -84,3 +84,9 @@ export default defineComponent({
},
});
</script>
<style lang="scss" scoped>
.yrolvcoq {
--section-padding: 16px;
}
</style>

View File

@@ -46,7 +46,7 @@
<script lang="ts">
import { defineComponent } from 'vue';
import { faGripVertical, faChevronLeft, faHashtag, faBroadcastTower, faFireAlt, faEllipsisH, faPencilAlt, faBars, faTimes, faSearch, faUserCog, faCog, faUser, faHome, faStar, faCircle, faAt, faListUl, faPlus, faUserClock, faUsers, faTachometerAlt, faExchangeAlt, faGlobe, faChartBar, faCloud, faServer, faInfoCircle, faQuestionCircle, faProjectDiagram, faStream } from '@fortawesome/free-solid-svg-icons';
import { faGripVertical, faChevronLeft, faHashtag, faBroadcastTower, faFireAlt, faEllipsisH, faPencilAlt, faBars, faTimes, faSearch, faUserCog, faCog, faUser, faHome, faStar, faCircle, faAt, faListUl, faPlus, faUserClock, faUsers, faTachometerAlt, faExchangeAlt, faGlobe, faChartBar, faCloud, faServer, faInfoCircle, faQuestionCircle, faProjectDiagram, faStream, faExclamationCircle } from '@fortawesome/free-solid-svg-icons';
import { faBell, faEnvelope, faLaugh, faComments } from '@fortawesome/free-regular-svg-icons';
import { host, instanceName } from '@/config';
import { search } from '@/scripts/search';
@@ -217,6 +217,11 @@ export default defineComponent({
text: this.$t('announcements'),
to: '/instance/announcements',
icon: faBroadcastTower,
}, {
type: 'link',
text: this.$t('abuseReports'),
to: '/instance/abuses',
icon: faExclamationCircle,
}, {
type: 'link',
text: this.$t('logs'),

View File

@@ -7,7 +7,9 @@
<span class="title" @mousedown.prevent="onHeaderMousedown" @touchstart.prevent="onHeaderMousedown">
<slot name="header"></slot>
</span>
<slot name="buttons"></slot>
<slot name="buttons">
<button class="_button" style="pointer-events: none;"></button>
</slot>
</div>
<div class="body" v-if="padding">
<div class="_section">
@@ -313,11 +315,13 @@ export default defineComponent({
// 高さを適用
applyTransformHeight(height) {
if (height > window.innerHeight) height = window.innerHeight;
(this.$el as any).style.height = height + 'px';
},
// 幅を適用
applyTransformWidth(width) {
if (width > window.innerWidth) width = window.innerWidth;
(this.$el as any).style.width = width + 'px';
},
@@ -371,8 +375,6 @@ export default defineComponent({
width: 100%;
height: 100%;
--section-padding: 16px;
> .header {
$height: 50px;
display: flex;
@@ -380,7 +382,6 @@ export default defineComponent({
z-index: 1;
flex-shrink: 0;
box-shadow: 0px 1px var(--divider);
cursor: move;
user-select: none;
height: $height;
@@ -400,6 +401,8 @@ export default defineComponent({
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-align: center;
cursor: move;
}
}

View File

@@ -4,6 +4,7 @@ import Stream from '@/scripts/stream';
import { store } from '@/store';
import { apiUrl } from '@/config';
import MkPostFormDialog from '@/components/post-form-dialog.vue';
import MkWaitingDialog from '@/components/waiting-dialog.vue';
const ua = navigator.userAgent.toLowerCase();
export const isMobile = /mobile|iphone|ipad|android/.test(ua);
@@ -73,7 +74,7 @@ export function apiWithDialog(
promiseDialog(promise, onSuccess, onFailure ? onFailure : (e) => {
dialog({
type: 'error',
text: e.message + '\n' + (e as any).id,
text: e.message + '<br>' + (e as any).id,
});
});
@@ -111,7 +112,8 @@ export function promiseDialog<T extends Promise<any>>(
}
});
popup(defineAsyncComponent(() => import('@/components/waiting-dialog.vue')), {
// NOTE: dynamic importすると挙動がおかしくなる(showingの変更が伝播しない)
popup(MkWaitingDialog, {
success: success,
showing: showing,
text: text,

View File

@@ -0,0 +1,163 @@
<template>
<div class="">
<div class="_section reports">
<div class="_content">
<div class="inputs" style="display: flex;">
<MkSelect v-model:value="state" style="margin: 0; flex: 1;">
<template #label>{{ $t('state') }}</template>
<option value="all">{{ $t('all') }}</option>
<option value="unresolved">{{ $t('unresolved') }}</option>
<option value="resolved">{{ $t('resolved') }}</option>
</MkSelect>
<MkSelect v-model:value="targetUserOrigin" style="margin: 0; flex: 1;">
<template #label>{{ $t('targetUserOrigin') }}</template>
<option value="combined">{{ $t('all') }}</option>
<option value="local">{{ $t('local') }}</option>
<option value="remote">{{ $t('remote') }}</option>
</MkSelect>
<MkSelect v-model:value="reporterOrigin" style="margin: 0; flex: 1;">
<template #label>{{ $t('reporterOrigin') }}</template>
<option value="combined">{{ $t('all') }}</option>
<option value="local">{{ $t('local') }}</option>
<option value="remote">{{ $t('remote') }}</option>
</MkSelect>
</div>
<!-- TODO
<div class="inputs" style="display: flex; padding-top: 1.2em;">
<MkInput v-model:value="searchUsername" style="margin: 0; flex: 1;" type="text" spellcheck="false" @update:value="$refs.reports.reload()">
<span>{{ $t('username') }}</span>
</MkInput>
<MkInput v-model:value="searchHost" style="margin: 0; flex: 1;" type="text" spellcheck="false" @update:value="$refs.reports.reload()" :disabled="pagination.params().origin === 'local'">
<span>{{ $t('host') }}</span>
</MkInput>
</div>
-->
<MkPagination :pagination="pagination" #default="{items}" ref="reports" :auto-margin="false" style="margin-top: var(--margin);">
<div class="bcekxzvu _card _vMargin" v-for="report in items" :key="report.id">
<div class="_content target">
<MkAvatar class="avatar" :user="report.targetUser"/>
<div class="info">
<MkUserName class="name" :user="report.targetUser"/>
<div class="acct">@{{ acct(report.targetUser) }}</div>
</div>
</div>
<div class="_content">
<div>
<Mfm :text="report.comment"/>
</div>
<hr>
<div>Reporter: <MkAcct :user="report.reporter"/></div>
<div><MkTime :time="report.createdAt"/></div>
</div>
<div class="_footer">
<div v-if="report.assignee">Assignee: <MkAcct :user="report.assignee"/></div>
<MkButton @click="resolve(report)" primary v-if="!report.resolved">{{ $t('abuseMarkAsResolved') }}</MkButton>
</div>
</div>
</MkPagination>
</div>
</div>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { faPlus, faUsers, faSearch, faBookmark, faMicrophoneSlash, faExclamationCircle } from '@fortawesome/free-solid-svg-icons';
import { faSnowflake, faBookmark as farBookmark } from '@fortawesome/free-regular-svg-icons';
import parseAcct from '../../../misc/acct/parse';
import MkButton from '@/components/ui/button.vue';
import MkInput from '@/components/ui/input.vue';
import MkSelect from '@/components/ui/select.vue';
import MkPagination from '@/components/ui/pagination.vue';
import { acct } from '../../filters/user';
import * as os from '@/os';
export default defineComponent({
components: {
MkButton,
MkInput,
MkSelect,
MkPagination,
},
data() {
return {
INFO: {
header: [{
title: this.$t('abuseReports'),
icon: faExclamationCircle
}],
},
searchUsername: '',
searchHost: '',
state: 'unresolved',
reporterOrigin: 'combined',
targetUserOrigin: 'combined',
pagination: {
endpoint: 'admin/abuse-user-reports',
limit: 10,
params: () => ({
state: this.state,
reporterOrigin: this.reporterOrigin,
targetUserOrigin: this.targetUserOrigin,
}),
},
faPlus, faUsers, faSearch, faBookmark, farBookmark, faMicrophoneSlash, faSnowflake
}
},
watch: {
state() {
this.$refs.reports.reload();
},
reporterOrigin() {
this.$refs.reports.reload();
},
targetUserOrigin() {
this.$refs.reports.reload();
},
},
methods: {
acct,
resolve(report) {
os.apiWithDialog('admin/resolve-abuse-user-report', {
reportId: report.id,
}).then(() => {
this.$refs.reports.removeItem(item => item.id === report.id);
});
},
}
});
</script>
<style lang="scss" scoped>
.bcekxzvu {
> .target {
display: flex;
width: 100%;
box-sizing: border-box;
text-align: left;
align-items: center;
> .avatar {
width: 42px;
height: 42px;
}
> .info {
margin-left: 0.3em;
padding: 0 8px;
flex: 1;
> .name {
font-weight: bold;
}
}
}
}
</style>

View File

@@ -86,6 +86,7 @@ export const router = createRouter({
{ path: '/instance/federation', component: page('instance/federation') },
{ path: '/instance/relays', component: page('instance/relays') },
{ path: '/instance/announcements', component: page('instance/announcements') },
{ path: '/instance/abuses', component: page('instance/abuses') },
{ path: '/notes/:note', name: 'note', component: page('note') },
{ path: '/tags/:tag', component: page('tag') },
{ path: '/auth/:token', component: page('auth') },

View File

@@ -1,4 +1,4 @@
import { faAt, faListUl, faEye, faEyeSlash, faBan, faPencilAlt, faComments, faUsers, faMicrophoneSlash, faPlug } from '@fortawesome/free-solid-svg-icons';
import { faAt, faListUl, faEye, faEyeSlash, faBan, faPencilAlt, faComments, faUsers, faMicrophoneSlash, faPlug, faExclamationCircle } from '@fortawesome/free-solid-svg-icons';
import { faSnowflake, faEnvelope } from '@fortawesome/free-regular-svg-icons';
import { i18n } from '@/i18n';
import copyToClipboard from '@/scripts/copy-to-clipboard';
@@ -102,6 +102,12 @@ export function getUserMenu(user) {
});
}
async function reportAbuse() {
os.popup(await import('@/components/abuse-report-window.vue'), {
user: user,
}, {}, 'closed');
}
async function getConfirmed(text: string): Promise<boolean> {
const confirm = await os.dialog({
type: 'warning',
@@ -157,6 +163,12 @@ export function getUserMenu(user) {
action: toggleBlock
}]);
menu = menu.concat([null, {
icon: faExclamationCircle,
text: i18n.global.t('reportAbuse'),
action: reportAbuse
}]);
if (store.getters.isSignedIn && (store.state.i.isAdmin || store.state.i.isModerator)) {
menu = menu.concat([null, {
icon: faMicrophoneSlash,

View File

@@ -3,7 +3,6 @@ import { User } from './user';
import { id } from '../id';
@Entity()
@Index(['userId', 'reporterId'], { unique: true })
export class AbuseUserReport {
@PrimaryColumn(id())
public id: string;
@@ -16,13 +15,13 @@ export class AbuseUserReport {
@Index()
@Column(id())
public userId: User['id'];
public targetUserId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
})
@JoinColumn()
public user: User | null;
public targetUser: User | null;
@Index()
@Column(id())
@@ -34,8 +33,42 @@ export class AbuseUserReport {
@JoinColumn()
public reporter: User | null;
@Column({
...id(),
nullable: true
})
public assigneeId: User['id'] | null;
@ManyToOne(type => User, {
onDelete: 'SET NULL'
})
@JoinColumn()
public assignee: User | null;
@Index()
@Column('boolean', {
default: false
})
public resolved: boolean;
@Column('varchar', {
length: 512,
length: 2048,
})
public comment: string;
//#region Denormalized fields
@Index()
@Column('varchar', {
length: 128, nullable: true,
comment: '[Denormalized]'
})
public targetUserHost: string | null;
@Index()
@Column('varchar', {
length: 128, nullable: true,
comment: '[Denormalized]'
})
public reporterHost: string | null;
//#endregion
}

View File

@@ -15,14 +15,19 @@ export class AbuseUserReportRepository extends Repository<AbuseUserReport> {
id: report.id,
createdAt: report.createdAt,
comment: report.comment,
resolved: report.resolved,
reporterId: report.reporterId,
userId: report.userId,
targetUserId: report.targetUserId,
assigneeId: report.assigneeId,
reporter: Users.pack(report.reporter || report.reporterId, null, {
detail: true
}),
user: Users.pack(report.user || report.userId, null, {
targetUser: Users.pack(report.targetUser || report.targetUserId, null, {
detail: true
}),
assignee: report.assigneeId ? Users.pack(report.assignee || report.assigneeId, null, {
detail: true
}) : null,
});
}

View File

@@ -19,8 +19,10 @@ export default async (actor: IRemoteUser, activity: IFlag): Promise<string> => {
await AbuseUserReports.insert({
id: genId(),
createdAt: new Date(),
userId: users[0].id,
targetUserId: users[0].id,
targetUserHost: users[0].host,
reporterId: actor.id,
reporterHost: actor.host,
comment: `${activity.content}\n${JSON.stringify(uris, null, 2)}`
});

View File

@@ -23,12 +23,50 @@ export const meta = {
untilId: {
validator: $.optional.type(ID),
},
state: {
validator: $.optional.nullable.str,
default: null,
},
reporterOrigin: {
validator: $.optional.str.or([
'combined',
'local',
'remote',
]),
default: 'combined'
},
targetUserOrigin: {
validator: $.optional.str.or([
'combined',
'local',
'remote',
]),
default: 'combined'
},
}
};
export default define(meta, async (ps) => {
const query = makePaginationQuery(AbuseUserReports.createQueryBuilder('report'), ps.sinceId, ps.untilId);
switch (ps.state) {
case 'resolved': query.andWhere('report.resolved = TRUE'); break;
case 'unresolved': query.andWhere('report.resolved = FALSE'); break;
}
switch (ps.reporterOrigin) {
case 'local': query.andWhere('report.reporterHost IS NULL'); break;
case 'remote': query.andWhere('report.reporterHost IS NOT NULL'); break;
}
switch (ps.targetUserOrigin) {
case 'local': query.andWhere('report.targetUserHost IS NULL'); break;
case 'remote': query.andWhere('report.targetUserHost IS NOT NULL'); break;
}
const reports = await query.take(ps.limit!).getMany();
return await AbuseUserReports.packMany(reports);

View File

@@ -3,7 +3,6 @@ import { getConnection } from 'typeorm';
export const meta = {
requireCredential: true as const,
requireAdmin: true,
requireModerator: true,
desc: {

View File

@@ -16,12 +16,15 @@ export const meta = {
}
};
export default define(meta, async (ps) => {
export default define(meta, async (ps, me) => {
const report = await AbuseUserReports.findOne(ps.reportId);
if (report == null) {
throw new Error('report not found');
}
await AbuseUserReports.delete(report.id);
await AbuseUserReports.update(report.id, {
resolved: true,
assigneeId: me.id,
});
});

View File

@@ -6,7 +6,6 @@ import redis from '../../../../db/redis';
export const meta = {
requireCredential: true as const,
requireAdmin: true,
requireModerator: true,
desc: {

View File

@@ -26,7 +26,7 @@ export const meta = {
},
comment: {
validator: $.str.range(1, 3000),
validator: $.str.range(1, 2048),
desc: {
'ja-JP': '迷惑行為の詳細'
}
@@ -72,9 +72,11 @@ export default define(meta, async (ps, me) => {
const report = await AbuseUserReports.save({
id: genId(),
createdAt: new Date(),
userId: user.id,
targetUserId: user.id,
targetUserHost: user.host,
reporterId: me.id,
comment: ps.comment
reporterHost: null,
comment: ps.comment,
});
// Publish event to moderators
@@ -90,7 +92,7 @@ export default define(meta, async (ps, me) => {
for (const moderator of moderators) {
publishAdminStream(moderator.id, 'newAbuseUserReport', {
id: report.id,
userId: report.userId,
targetUserId: report.targetUserId,
reporterId: report.reporterId,
comment: report.comment
});

View File

@@ -50,8 +50,6 @@ module.exports = {
preserveWhitespace: false
}
}
}, {
loader: 'vue-svg-inline-loader-corejs3'
}]
}, {
test: /\.scss?$/,

858
yarn.lock

File diff suppressed because it is too large Load Diff