diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 0b3bbc186f..9ba110f776 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -17,5 +17,9 @@ jobs: - uses: actions/setup-node@v1 with: node-version: 12.x + - uses: actions/cache@v2 + with: + path: '**/node_modules' + key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }} - run: yarn install - run: yarn lint diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e220d714d0..6a684eaa48 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -75,6 +75,10 @@ jobs: uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} + - uses: actions/cache@v2 + with: + path: '**/node_modules' + key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }} - name: Install dependencies run: yarn install - name: Check yarn.lock diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 843b732cd4..fda19cb919 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -3,7 +3,7 @@ "editorconfig.editorconfig", "eg2.vscode-npm-script", "ms-vscode.typescript-javascript-grammar", - "ms-vscode.vscode-typescript-tslint-plugin", + "dbaeumer.vscode-eslint", "johnsoncodehk.volar", "sysoev.language-stylus" ] diff --git a/CHANGELOG.md b/CHANGELOG.md index f2f1b5ce75..5376172b1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,12 +10,17 @@ --> -## 12.x.x (unreleased) +## 12.97.0 (2021/11/19) ### Improvements -- アカウント削除に確認ダイアログを出すように +- クライアント: 返信先やRenoteに対しても自動折りたたみされるように +- クライアント: 長いスレッドの表示を改善 +- クライアント: 翻訳にもMFMを適用し、元の文章の改行などを保持するように +- クライアント: アカウント削除に確認ダイアログを出すように ### Bugfixes +- クライアント: ユーザー検索の「全て」が動作しない問題を修正 +- クライアント: リアクション一覧、Renote一覧ツールチップのスタイルを修正 ## 12.96.1 (2021/11/13) ### Improvements diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 11b7329539..d9a9e725f7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -49,6 +49,11 @@ If your language is not listed in Crowdin, please open an issue. ![Crowdin](https://d322cqt584bo4o.cloudfront.net/misskey/localized.svg) +## Development +During development, it is useful to use the `npm run dev` command. +This command monitors the server-side and client-side source files and automatically builds them if they are modified. +In addition, it will also automatically start the Misskey server process. + ## Testing - Test codes are located in [`/test`](/test). diff --git a/gulpfile.js b/gulpfile.js index a86185324a..3bc0b23bee 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -57,6 +57,6 @@ gulp.task('default', gulp.task('build')); gulp.task('watch', () => { gulp.watch([ - './packages/**/*', + './packages/*/src/**/*', ], { ignoreInitial: false }, gulp.task('build')); }); diff --git a/locales/ar-SA.yml b/locales/ar-SA.yml index 71626224a7..cd69d921b8 100644 --- a/locales/ar-SA.yml +++ b/locales/ar-SA.yml @@ -13,8 +13,8 @@ ok: " حسناً" gotIt: "فهِمت" cancel: " إلغاء" enterUsername: "أدخِل إسم مسخدم" -renotedBy: "أعاد {user} نشر ملاحظة" -noNotes: "لم يتم العثور على أية ملاحظات" +renotedBy: "أعاد نشرها {user}" +noNotes: "لم يُعثر على أية ملاحظات" noNotifications: "ليس هناك أية اشعارات" instance: "مثيل الخادم" settings: "الاعدادات" @@ -35,7 +35,7 @@ addUser: "اضافة مستخدم" favorite: "إضافة إلى المفضلة" favorites: "المفضلات" unfavorite: "إزالة من المفضلة" -favorited: "تمت الإضافة إلى المفضلة." +favorited: "أُضيف إلى المفضلة." alreadyFavorited: "تمت إضافته بالفعل إلى المفضلة." cantFavorite: "تعذرت الإضافة إلى المفضلة." pin: "دبّسها على الصفحة الشخصية" @@ -65,7 +65,7 @@ files: "الملفات" download: "تنزيل" driveFileDeleteConfirm: "أمتأكد من حذف ملف {name}؟ كل الملاحظات المُرفق بها هذا الملف ستحذف." unfollowConfirm: "أمتأكد من إلغاء متابعة {name}؟" -exportRequested: "قد تستغرق عملية التصدير بعض الوقت. بمجرد الانتهاء ستتم إضافة الملف الناتج إلى قرص التخزين." +exportRequested: "قد تستغرق عملية التصدير بعض الوقت. بمجرد الانتهاء سيضاف الملف الناتج إلى قرص التخزين." importRequested: "يستغرق الاستيراد بعض الوقت" lists: "القوائم" noLists: "ليس لديك أية قائمة" @@ -105,9 +105,9 @@ you: "أنت" clickToShow: "اضغط للعرض" sensitive: "محتوى حساس" add: "إضافة" -reaction: "تفاعل" +reaction: "التفاعلات" reactionSettingDescription: "اختر التفاعلات المفضلة التي تريد تثبيتها في منتقي التفاعلات." -reactionSettingDescription2: "اسحب لإعادة التنظيم ، انقر للحذف ، استخدم \"+\" للإضافة." +reactionSettingDescription2: "اسحب لترتيب ، انقر للحذف ، استخدم \"+\" للإضافة." rememberNoteVisibility: "تذكر إعدادت مدى رؤية الملاحظات" attachCancel: "أزل المرفق" markAsSensitive: "علّمه كمحتوى حساس" @@ -129,15 +129,15 @@ selectWidget: "اختر ودجة" editWidgets: "عدّل الودجات" editWidgetsExit: "تم" customEmojis: "إيموجي مخصص" -emoji: "الوجوه التعبيرية" -emojis: "الوجوه التعبيرية" -emojiName: "اسم الوجه التعبيري" -emojiUrl: "رابط الوجه التعبيري" +emoji: "إيموجي" +emojis: "إيموجي" +emojiName: "اسم الإيموجي" +emojiUrl: "رابط الإيموجي" addEmoji: "إضافة إيموجي" settingGuide: "الإعدادات المستحسنة" cacheRemoteFiles: "خزن مؤقتا الملفات البعيدة" flagAsBot: "علّمه كحساب آلي" -flagAsBotDescription: "فعّل هذا الخيار إذا كان هذا الحساب يُدار عبر برمجية. إذا فُعل فسيكون بمثابة علامة للمطورين الآخرين لتجنب سلاسل لا متناعية من التفاعل بين حسابات الآلية وضبط أنظمة ميسكي للتعامل مع هذا الحساب كروبوت." +flagAsBotDescription: "فعّل هذا الخيار إذا كان هذا الحساب يُدار عبر برمجية. إذا فُعل فسيكون بمثابة علامة للمطورين الآخرين لتجنب سلاسل لا متناهية من التفاعل بين حسابات الآلية وضبط أنظمة ميسكي للتعامل مع هذا الحساب كآلي." flagAsCat: "علّم هذا الحساب كحساب قط" flagAsCatDescription: "فعّل هذا الخيار لوضع علامة على الحساب لتوضيح أنه حساب قط." autoAcceptFollowed: "اقبل طلبات المتابعة تلقائيا من الحسابات المتابَعة" @@ -152,13 +152,14 @@ searchWith: "البحث: {q}" youHaveNoLists: "لا تمتلك أية قائمة" followConfirm: "أتريد متابعة {name}؟" proxyAccount: "حساب وكيل البروكسي" +proxyAccountDescription: "يتصرف حساب الوكيل كمتابع بعيد لمستخدمين تحت ظروف معينة. على سبيل المثال ، عندما يضيف مستخدم مستخدمًا بعيدًا إلى قائمة فإن ملاحظاته لن تُرسل إلى المثيل ما لم يُتابعه مستخدم محلي. وبالتالي فإن حساب الوكيل سوف يتابع هذا المستخدم لكي تُرسل ملاحظاته." host: "المضيف" selectUser: "حدّد مستخدمًا" recipient: "المرسَل إليه·ها" annotation: "التعليقات" federation: "الفديرالية" instances: "مثيل الخادم" -registeredAt: "مسجل في" +registeredAt: "مسجل منذ" latestRequestSentAt: "آخر طلب أرسِل في" latestRequestReceivedAt: "آخر طلب تُلقي في" latestStatus: "الحالات الأخيرة" @@ -169,7 +170,7 @@ perDay: "في اليوم" stopActivityDelivery: "وقف إرسال النشاط" blockThisInstance: "احجب مثيل الخادم هذا" operations: "الإجراءات" -software: "البرنامج" +software: "البرمجية" version: "الإصدار" metadata: "البيانات الوصفية" withNFiles: "{n} ملف (ملفات)" @@ -187,8 +188,8 @@ clearCachedFilesConfirm: "أتريد حذف التخزين المؤقت للمل blockedInstances: "المثلاء المحجوبون" blockedInstancesDescription: "قائمة بالمثلاء التي تريد حظرها بحيث كل نطاق في سطر لوحده. بعد إدراجهم لن يتمكنوا من التفاعل مع هذا المثيل." muteAndBlock: "تم كتمها / تم حجبها" -mutedUsers: "الحسابات التي تم كتمها" -blockedUsers: "الحسابات التي تم حظرها" +mutedUsers: "الحسابات المكتومة" +blockedUsers: "الحسابات المحجوبة" noUsers: "ليس هناك مستخدمون" editProfile: "تعديل الملف التعريفي" noteDeleteConfirm: "هل تريد حذف هذه الملاحظة؟" @@ -198,14 +199,23 @@ done: "تمّ" processing: "المعالجة جارية" preview: "معاينة" default: "افتراضي" -noCustomEmojis: "ليس هناك إيموجيات" +noCustomEmojis: "ليس هناك إيموجي" +noJobs: "لا توجد مهام" federating: "الفديرالية جارية" blocked: "محجوب" suspended: "مُعلّق" all: "الكل" notResponding: "لا يستجيب" +instanceFollowing: "المثلاء المتابَعون" +instanceFollowers: "المثلاء المتابِعون" +instanceUsers: "مستخدمو المثيل" changePassword: "تغيير الكلمة السرية" security: "الأمان" +retypedNotMatch: "المدخلات لا تتطابق" +currentPassword: "كلمة المرور الحالية" +newPassword: "كلمة المرور الجديدة" +newPasswordRetype: "كرّر كلمة المرور الجديدة:" +attachFile: "أرفق ملفات" more: "المزيد!" featured: "المتداولة" usernameOrUserId: "اسم المستخدم أو معرّفه" @@ -214,11 +224,11 @@ lookup: "البحث" announcements: "الإعلانات" imageUrl: "رابط الصورة" remove: "حذف" -removed: "تم حذفه بنجاح" +removed: "حُذف بنجاح" removeAreYouSure: "متأكد من أنك تريد حذف {x}؟" deleteAreYouSure: "متأكد من أنك تريد حذف {x}؟" resetAreYouSure: "هل تريد إعادة التعيين؟" -saved: "تم حفظه" +saved: "حُفظ" messaging: "المحادثة" upload: "ارفع" fromDrive: "من المخزن" @@ -228,21 +238,22 @@ uploadFromUrlDescription: "رابط الملف المراد رفعه" uploadFromUrlRequested: "الرفع مطلوب" uploadFromUrlMayTakeTime: "سيستغرق بعض الوقت لاتمام الرفع " explore: "استكشاف" -games: "ألعاب Misskey" +games: "ألعاب ميسكي" messageRead: "مقروءة" noMoreHistory: "لا يوجد المزيد من التاريخ" startMessaging: "ابدأ محادثة" -nUsersRead: "تمت القراءة من {n}" +nUsersRead: "قرأه {n}" agreeTo: "اوافق على {0}" tos: "شروط الخدمة" start: "البداية" home: "الرئيسي" +remoteUserCaution: "هذه المعلومات قد لا تكون مكتملة بما أن المستخدم من مثيل بعيد." activity: "النشاط" images: "الصور" birthday: "تاريخ الميلاد" yearsOld: "{age} سنة" -registeredDate: "انظم في" -location: "المكان" +registeredDate: "انضم في" +location: "الموقع الجغرافي" theme: "المظهر" themeForLightMode: "الحلة في الوضع الفاتح" themeForDarkMode: "الحلة في الوضع الداكن" @@ -268,6 +279,7 @@ emptyFolder: "هذا المجلد فارغ" unableToDelete: "لا يمكن حذفه" inputNewFileName: "ادخل الإسم الجديد للملف" inputNewFolderName: "ادخل الإسم الجديد للمجلد" +circularReferenceFolder: "المجلد المستهدف ينتمي للمجلد الذي تريد حذفه" hasChildFilesOrFolders: "الان الملف غير فارغ. لا يمكن حذفه" copyUrl: "انسخ الرابط" rename: "إعادة التسمية" @@ -297,12 +309,16 @@ monthX: "{month}" yearX: "{year}" pages: "الصفحات" integration: "دمج" +connectService: "اتصل" +disconnectService: "اقطع الاتصال" enableLocalTimeline: "تفعيل الخيط المحلي" enableGlobalTimeline: "تفعيل الخيط الزمني الشامل" -disablingTimelinesInfo: "سيتمكن المسؤولون ومن تعديل دائمًا و من الوصول إلى جميع المخططات الزمنية ، حتى إذا لم يتم تمكينها." +disablingTimelinesInfo: "سيتمكن المديرون والمشرفون من الوصول إلى كل الخطوط الزمنية حتى وإن لم تفعّل." registration: "إنشاء حساب" enableRegistration: "تفعيل إنشاء الحسابات الجديدة" invite: "دعوة" +proxyRemoteFiles: "جلب الملفات البعيدة عبر وكيل" +proxyRemoteFilesDescription: "إذا فُعّل هذا الإعداد ، ستُجلب الملفات البعيدة غير الموجودة في التخزين المحلي للخادم عبر وكيل وتُنشأ لها صور مصغرة. لن يأثر على تخزين الخادم." driveCapacityPerLocalAccount: "حصة التخزين لكل مستخدم محلي" driveCapacityPerRemoteAccount: "حصة التخزين لكل مستخدم بعيد" inMb: "بالميغابايت" @@ -314,29 +330,36 @@ pinnedUsers: "المستخدمون المدبسون" pinnedUsersDescription: "قائمة المستخدمين المدبسين في لسان \"استكشف\" ، اجعل كل اسم مستخدم في سطر لوحده." pinnedPages: "الصفحات المدبسة" pinnedPagesDescription: "أدخل مسار الصفحات التي تريد تدبيسها في أعلى هذا الموقع، اجعل كل مسار في سطر لوحده." +pinnedClipId: "معرّف المشبك المدبس" pinnedNotes: "ملاحظة مدبسة" +hcaptcha: "hCaptcha" +enableHcaptcha: "فعّل hCaptcha" hcaptchaSiteKey: "مفتاح الموقع" hcaptchaSecretKey: "المفتاح السري" recaptcha: "reCAPTCHA" enableRecaptcha: "تمكين reCAPTCHA" recaptchaSiteKey: "مفتاح الموقع" recaptchaSecretKey: "المفتاح السري" +avoidMultiCaptchaConfirm: "يمكن أن يتسبب استخدام عدة خدمات لكلمات التحقق في حدوث تداخل. هل ترغب في إلغاء تنشيط الخدمات الأخرى؟ يمكنك ترك هذه الخدمات نشطة بالضغط على \"ألغ\"." antennas: "الهوائيات" manageAntennas: "إدارة الهوائيات" name: "الإسم" antennaSource: "مصدر الهوائي" antennaKeywords: "الكلمات المفتاحية للإستقبال" +antennaExcludeKeywords: "الكلمات المفتاحية المستثناة" notifyAntenna: "نبهني بصول ملاحظات جديدة" withFileAntenna: "ملاحظات تحوي ملفات فقط" +antennaUsersDescription: "اكتب اسم مستخدم لكل سطر" caseSensitive: "حساسية حالة الأحرف" withReplies: "بالردود" +connectedTo: "الحسابات التالية متصلة" notesAndReplies: "الملاحظات والردود" withFiles: "ذات مرفقات" silence: "اكتم" silenceConfirm: "أمتأكد من كتم هذا المستخدم؟" unsilence: "إلغاء الكتم" unsilenceConfirm: "أمتأكد من إلغاء كتم هذا المستخدم؟" -popularUsers: "المستخدمون الشائعون" +popularUsers: "المستخدمون الرائدون" recentlyUpdatedUsers: "أصحاب النشاطات الأخيرة" recentlyRegisteredUsers: "المستخدمون المنضمون حديثًا" recentlyDiscoveredUsers: "المستخدمون المكتشفون حديثًا" @@ -350,7 +373,7 @@ administrator: "المدير" token: "الرمز المميز" twoStepAuthentication: "الإستيثاق بعاملَيْن" moderator: "مشرِف" -nUsersMentioned: "{n} مستخدمين تمت الإشارة إليهم" +nUsersMentioned: "{n} مستخدمين أُشير إليهم" securityKey: "مفتاح الأمان" securityKeyName: "اسم المفتاح" registerSecurityKey: "سجل مفتاح أمان" @@ -374,8 +397,8 @@ close: "اغلق" group: "الفريق" groups: "الفِرَق" createGroup: "انشئ فريقًا" -ownedGroups: "مجموعات المالك" -joinedGroups: "المجموعات المنضم إليها" +ownedGroups: "فِرقي" +joinedGroups: "الفِرق المُنضم إليها" invites: "دعوة" groupName: "اسم الفريق" members: "الأعضاء" @@ -391,6 +414,7 @@ noteOf: "ملاحظات {user}" inviteToGroup: "دعوة إلى فريق" maxNoteTextLength: "حد عدد المحارف لكل ملاحظة" quoteAttached: "اِقتُبسَ" +quoteQuestion: "أتريد تضمينها كاقتباس" noMessagesYet: "ليس هناك رسائل بعد" newMessageExists: "لقد تلقيت رسالة جديدة" onlyOneFileCanBeAttached: "يمكنك إرفاق ملف واحد بالرسالة" @@ -410,14 +434,15 @@ passwordMatched: "التطابق صحيح!" passwordNotMatched: "غير متطابقتان" signinWith: "الولوج عبر {x}" signinFailed: "فشل الولوج، خطأ في اسم المستخدم أو كلمة المرور." +tapSecurityKey: "أنقر مفتاح الأمان" or: "أو" language: "اللغة" uiLanguage: "لغة واجهة المستخدم" -groupInvited: "دُعيت إلى مجموعة" +groupInvited: "دُعيت إلى فريقٍ" aboutX: "عن {x}" -useOsNativeEmojis: "استخدم الإيموجيات الخاصة بنظام التشغيل" +useOsNativeEmojis: "استخدم الإيموجي الخاصة بنظام التشغيل" youHaveNoGroups: "لا تمتلك أية فِرَق" -joinOrCreateGroup: "احصل على دعوة لمجموعة أو أنشئ واحدة." +joinOrCreateGroup: "احصل على دعوة لفريق أو أنشئ واحدًا." noHistory: "السجل فارغ" signinHistory: "تاريخ تسجيل الدخول" doing: "انتظر لحظة" @@ -443,12 +468,15 @@ promotion: "ترقية" promote: "روِّج" numberOfDays: "عدد الأيام" hideThisNote: "إخفاء هذه الملاحظة" +showFeaturedNotesInTimeline: "أظهر الملاحظات الشائعة في الخيط الزمني" objectStorageBaseUrl: "الرابط الأساسي" objectStoragePrefix: "البادئة" objectStorageEndpoint: "نقطة النهاية" objectStorageRegion: "المنطقة" objectStorageUseSSL: "استخدم SSL" +objectStorageUseSSLDesc: "عطل هذا الخيار إذا لم ترد استخدام API عبر HTTPS" objectStorageUseProxy: "اتصل عبر وكيل" +objectStorageUseProxyDesc: "عطل هذا الخيار إذا لم ترد استخدام API عبر وكيل" serverLogs: "سجلات الخادم" deleteAll: "حذف الكل" showFixedPostForm: "أظهر نموذج الكتابة في أعلى الصفحة" @@ -457,34 +485,42 @@ sounds: "الرنات" listen: "استمع" none: "لا شيء" showInPage: "اعرض في الصفحة" +popout: "منبثقة" volume: "مستوى الصوت" +masterVolume: "القرص الرئيسي" details: "التفاصيل" chooseEmoji: "اختر إيموجي" unableToProcess: "يتعذر إكمال العملية" recentUsed: "المستخدمة مؤخرا" -install: "التثبيت" +install: "ثبّت" uninstall: "إلغاء التثبيت" installedApps: "التطبيقات المُخوّلة" nothing: "لا يوجد شيء هنا" +installedDate: "تاريخ التثبيت" lastUsedDate: "آخر استخدام" state: "الحالة" sort: "ترتيب حسب" ascendingOrder: "تصاعدي" descendingOrder: "تنازلي" output: "الخارجة" +disablePagesScript: "عطّل AiScript في الصفحات" updateRemoteUser: "تحديث المعلومات عن المستخدم البعيد" deleteAllFiles: "حذف كافة الملفات" deleteAllFilesConfirm: "أتريد حذف كل الملفات؟" removeAllFollowing: "ألغ متابعة كل المتابَعين" -userSuspended: "تم تعليق هذا المستخدم." -userSilenced: "تم إسكات هذا المستخدم." +removeAllFollowingDescription: "تنفيذه سيلغي متابعة المستخدمين المتواجدين على {host}. يمكنك استخدامه إذا فُقد الخادم." +userSuspended: "عُلق هذا المستخدم." +userSilenced: "كُتم هذا المستخدم." yourAccountSuspendedTitle: "هذا الحساب معلق" +yourAccountSuspendedDescription: "عُلق الحساب بسبب انتهاك شروط خدمة المثيل و ما شابه. إذا أردت معرفة التفصيل تواصل مع مدير المثيل. رجاءً لا تنشئ حساب جديد." menu: "القائمة" +divider: "فاصل" addItem: "إضافة عنصر" rooms: "الغرفة" relays: "المُرَحلات" addRelay: "إضافة مُرحّل" -addedRelays: "المرحلات التي تم إضافتها" +addedRelays: "المرحلات المضافة" +serviceworkerInfo: "يجب أن يفعل لإرسال الإشعارات." deletedNote: "ملاحظة محذوفة" invisibleNote: "ملاحظة مخفية" enableInfiniteScroll: "فعّل التمرير المتواصل" @@ -495,9 +531,11 @@ enablePlayer: "افتح مشغل الفيديو" disablePlayer: "أغلق مشغل الفيديو" themeEditor: "مصمم القوالب" description: "الوصف" +author: "الكاتب" leaveConfirm: "لديك تغييرات غير محفوظة. أتريد المتابعة دون حفظها؟" manage: "إدارة " plugins: "الإضافات" +useFullReactionPicker: "استخدم الحجم الكامل لمنتقي التفاعلات" width: "العرض" height: "الإرتفاع" large: "كبير" @@ -508,31 +546,46 @@ permission: "أذونات" enableAll: "تشغيل الكل" disableAll: "تعطيل الكل" tokenRequested: "منح حق الوصول إلى الحساب" +pluginTokenRequestedDescription: "ستتمكن الإضافة من استخدام هذه الأذونات." notificationType: "أنواع الإشعارات" edit: "التعديل" +useStarForReactionFallback: "استخدم ★ كبديل إذا كان التفاعل مجهولًا" emailServer: "خادم البريد الإلكتروني" +emailConfigInfo: "يستخدم لتأكيد عنوان بريدك الإلكتروني ولإعادة تعيين كلمة المرور إن نسيتها." email: "البريد الإلكتروني " emailAddress: "عنوان البريد الالكتروني" +smtpConfig: "إعدادات خادم SMTP" smtpHost: "المضيف" smtpPort: "المنفذ" smtpUser: "اسم المستخدم" smtpPass: "الكلمة السرية" +emptyToDisableSmtpAuth: "اترك اسم المستخدم وكلمة المرور فارغين لتعطيل التحقق من SMTP" +smtpSecureInfo: "عطل هذا الخيار عند استخدام STARTTLS" +wordMute: "حظر الكلمات" makeActive: "تفعيل" display: "المظهر" copy: "نسخ" metrics: "المقاييس" +overview: "ملخص عام" +logs: "السِجلّات" +delayed: "متأخر" +database: "قاعدة البيانات" channel: "القنوات" create: "أنشئ" notificationSetting: "إعدادات التنبيهات" notificationSettingDesc: "اختر نوع التنبيهات المراد عرضها" +useGlobalSetting: "استخدم الإعدادات العامة" +useGlobalSettingDesc: "اذا فعّل ستطبق إعدادات إشعارات حسابك. إذا عطّل يمكن إجراء تكوينات مخصصة." other: "منوعات" regenerateLoginToken: "أعد توليد الرمز" +regenerateLoginTokenDescription: "ينشئ رمز استيثاق جديد في العادة هذا ليس ضروريًا ؛ عند إنشاء رمز جديد ستُخرج جميع الأجهزة." +setMultipleBySeparatingWithSpace: "يمكنك ادخال أكثر من مدخل واحد وذلك بفصلها بمسافات." fileIdOrUrl: "معرف الملف أو رابط" chatOpenBehavior: "سلوك نفاذة المحادثة عند فتحها" behavior: "السلوك" sample: "مثال" abuseReports: "البلاغات" -reportAbuse: "البلاغات" +reportAbuse: "أبلغ" reportAbuseOf: "أبلغ عن {name}" fillAbuseReportDescription: "أكتب بالتفصيل سبب البلاغ، إذا كنت تبلغ عن ملاحظة أرفق رابط لها." abuseReported: "أُرسل البلاغ، شكرًا لك" @@ -540,54 +593,98 @@ send: "أرسل" abuseMarkAsResolved: "علّم البلاغ كمحلول" openInNewTab: "افتح في لسان جديد" defaultNavigationBehaviour: "سلوك الملاحة الافتراضي" +instanceTicker: "معلومات المثيل الأصلي للملاحظات" waitingFor: "في انتظار {x}" random: "عشوائي" system: "النظام" switchUi: "بدّل واجهة المستخدم" +desktop: "سطح المكتب" +clip: "مِشبك" createNew: "أنشِئ جديد" optional: "اختياري" -public: "للعامة" +createNewClip: "أنشئ مِشبكَا جديدًا" +public: "علني" i18nInfo: "يترجم متطوعون ميسكي إلى عدة لغات، يمكنك المساعدة عبر {link}" manageAccessTokens: "إدارة رموز الوصول" accountInfo: "معلومات الحساب" notesCount: "عدد الملاحظات" repliesCount: "عدد الردود المرسلة" renotesCount: "عدد الملاحظات المعاد نشرها (المرسلة)" -repliedCount: "عدد الردود المستلمة" -renotedCount: "عدد الملاحظات المعاد نشرها (المستلمة)" +repliedCount: "عدد الردود المتلقاة" +renotedCount: "عدد الملاحظات المعاد نشرها (المتلقاة)" followingCount: "عدد الحسابات المتابَعة" followersCount: "عدد المتابِعين" sentReactionsCount: "عدد الانفعالات المرسلة" -receivedReactionsCount: "عدد الانفعالات المستلمة" +receivedReactionsCount: "عدد الانفعالات المتلقاة" pollVotesCount: "عدد الاستطلاعات المرسلة" -pollVotedCount: "عدد الاستطلاعات المستلمة" +pollVotedCount: "عدد الاستطلاعات المتلقاة" yes: "نعم" no: "لا" driveFilesCount: "عدد الملفات في قرص التخزين" +driveUsage: "المستغل من قرص التخزين" +noCrawleDescription: "يطلب من محركات البحث ألّا يُفهرسوا ملفك الشخصي وملاحظات وصفحاتك وما شابه." +disableShowingAnimatedImages: "لا تشغّل الصور المتحركة" +notSet: "لم يعيّن" +emailVerified: "تُحقّق من بريدك الإلكتروني" +noteFavoritesCount: "عدد الملاحظات المفضلة" +contact: "التواصل" useSystemFont: "استخدم الخط الافتراضية للنظام" +clips: "مشابك" experimentalFeatures: "ميّزات اختبارية" developer: "المطور" +makeExplorable: "أظهر الحساب في صفحة \"استكشاف\"" +makeExplorableDescription: "بتعطيل هذا الخيار لن يظهر حسابك في صفحة \"استكشاف\"" +reloadToApplySetting: "سيُطبق هذا الإعداد بعد إعادة تحميل الصفحة، أتريد إعادة تحميلها الآن؟" +showTitlebar: "اعرض شريط العنوان" clearCache: "امسح التخزين المؤقت" +onlineUsersCount: "{n} مستخدم متصل" +nUsers: "{n} مستخدم" +nNotes: "{n} ملاحظة" +sendErrorReports: "أرسل تقارير الأخطاء" +sendErrorReportsDescription: "إذا فعّلته ستساعد في تحسين ميسكي وذلك عبر مشاركة معلومات تفصيلية عن الخطأ.\nومما تحتويه التقارير: نسخة نظام التشغيل ونوع المتصفح وسجل نشاطك إلخ." +myTheme: "سماتي" +backgroundColor: "لون الخلفية" +accentColor: "طابع لوني" +textColor: "لون النص" +saveAs: "احفظ كـ..." +advanced: "متقدم" +value: "القيمة" +createdAt: "أُنشئ في" +updatedAt: "حُدّث في" +saveConfirm: "أتريد خفظ التغييرات؟" +deleteConfirm: "أمتأكد من الحذف؟" +invalidValue: "قيمة غير صالحة." +registry: "السجل" +closeAccount: "اختر حسبًا" currentVersion: "الإصدار الحالي" latestVersion: "آخر نسخة مستقرة" +youAreRunningUpToDateClient: "أنت تستخدم أحدث نسخة من العميل." +newVersionOfClientAvailable: "تتوفر نسخة أحدث للعميل" usageAmount: "الإستخدام" capacity: "السعة" inUse: "مستخدم" -useReactionPickerForContextMenu: "افتح منتقي التفاعلات عند التقر بالزر الأيمن" +editCode: "حرر الشفرة" +apply: "تطبيق" +emailNotification: "إشعارات البريد الكتروني" +inChannelSearch: "ابحث عن قناة" +useReactionPickerForContextMenu: "افتح منتقي التفاعلات عند النقر بالزر الأيمن" typingUsers: "{users} يكتب(ون)..." -jumpToSpecifiedDate: "انتقل إلى التاريخ المحدد" +jumpToSpecifiedDate: "انتقل إلى تاريخ محدد" showingPastTimeline: "أنت تستعرض حاليًا خيطًا زمنيًا قديمًا" +clear: "عودة" markAllAsRead: "علّم الكل كمقروء" goBack: "رجوع" unlikeConfirm: "أتريد إلغاء إعجابك؟" fullView: "ملء الشاشة" quitFullView: "اخرج من وضع ملء للشاشة" addDescription: "أضف وصفًا" +notSpecifiedMentionWarning: "في الملاحظة ذكر لمستخدمين لن يستلموها." info: "عن" userInfo: "معلومات المستخدم" unknown: "مجهول" onlineStatus: "الحالة" hideOnlineStatus: "اخف الحالة" +hideOnlineStatusDescription: "قد يؤدي جعل اخفاء حالتك إلى تعطيل أداء بعض الميزات ، مثل البحث." online: "متصل" active: "نشط" offline: "غير متصل" @@ -602,14 +699,17 @@ user: "المستخدمون" administration: "إدارة " accounts: "الحسابات" switch: "بدّل" +noMaintainerInformationWarning: "لم تُضبط معلومات المدير" noBotProtectionWarning: "لم تضبط الحماية من الحسابات الآلية" configure: "اضبط" postToGallery: "انشر في المعرض" gallery: "المعرض" recentPosts: "المشاركات الحديثة" +popularPosts: "المشاركات المتداولة" shareWithNote: "شاركه في ملاحظة" ads: "الإعلانات" expiration: "ينتهي استطلاع الرأي في" +memo: "تذكير" priority: "الأولوية" high: "عالية" middle: "متوسط" @@ -618,12 +718,15 @@ emailNotConfiguredWarning: "لم تعيّن بريدًا إلكترونيًا" ratio: "النسبة" previewNoteText: "اعرض معاينة" customCss: "CSS مخصصة" +customCssWarn: "استخدم هذه الإعداد فقط إن كان لك علم بماهيّته. إدخال قيمة غير مناسبة سيسسب ضررًا للعميل." global: "الشامل" squareAvatars: "اعرض شكل الصور الرمزية كمربعات" sent: "أرسل" received: "اُستلم" searchResult: "نتائج البحث" hashtags: "الوسوم" +troubleshooting: "استكشاف الأخطاء وإصلاحها" +useBlurEffect: "استخدم تأثير الطمس في الواجهة" learnMore: "راجع المزيد" misskeyUpdated: "حُدث ميسكي!" whatIsNew: "اعرض التغييرات" @@ -635,20 +738,49 @@ lastCommunication: "آخر تواصل" itsOn: "مفعّل" itsOff: "معطّل" emailRequiredForSignup: "عنوان البريد الإلكتروني إلزامي للتسجيل" +unread: "غير مقروءة" filter: "رشّح" controlPanel: "لوحة التحكم" manageAccounts: "إدارة الحسابات" makeReactionsPublic: "اجعل سجل التفاعلات علنيًا" makeReactionsPublicDescription: "هذا سيجعل قائمة تفاعلاتك مرئية للعلن." classic: "تقليدي" -_docs: - admin: "إدارة " +muteThread: "اكتم النقاش" +unmuteThread: "ارفع الكتم عن النقاش" +_signup: + almostThere: "كدت تنتهي" + emailAddressInfo: "رجاءً أدخل بريدك الإلكتروني." + emailSent: "أرسلت رسالة تأكيد إلى بريدك الإلكتروني ({email})، أنقر على الرابط الموجود فيها لإكمال التسجيل." +_accountDelete: + accountDelete: "احذف الحساب" + mayTakeTime: "نظرًا لأن حذف الحساب يحتاج موارد كثيرة فقد يستغرق وقتًا طويلاً ليكتمل وذلك بناءً على كمية المحتوى الموجود في الحساب وعدد الملفات المرفوعة." + sendEmail: "عند إنتهاء الحذف سترسل رسالة إلى البريد الإلكتروني المرتبط بهذا الحساب." + requestAccountDelete: "أرسل طلبًا لحذف الحساب" + started: "بدأت عملية الحذف." + inProgress: "عملية الحذف جارية" +_ad: + back: "رجوع" +_forgotPassword: + enterEmail: "أدخل البريد الإلكتروني المرتبط بحسابك لكي يرسل إليك رابط لإعادة تعيين كلمة المرور." + ifNoEmail: "إذا لم تربط حسابك ببريد إلكتروني سيتوجب عليك التواصل مع مدير الموقع." + contactAdmin: "هذا المثيل لا يدعم استخدام البريد الإلكتروني، إن أردت إعادة تعيين كلمة المرور تواصل مع المدير." _gallery: + my: "معرضي" + liked: "المشاركات المُعجب بها" + like: "أعجبني" unlike: "أزل الإعجاب" _email: _follow: title: "يتابعك" + _receiveFollowRequest: + title: "استلمت طلب متابعة" +_plugin: + install: "ثبّت إضافات" + installWarn: "رجاءً لا تثبت إضافات غير موثوقة." + manage: "إدارة الإضافات" _registry: + scope: "الحيّز" + key: "مفتاح" keys: "المفاتيح" domain: "النّطاق" createKey: "أنشئ مفتاحًا" @@ -662,24 +794,51 @@ _aboutMisskey: morePatrons: "نحن نقدر الدعم الذي قدمه العديد من الأشخاص الذين لم نذكرهم. شكرًا لكم 🥰" patrons: "الداعمون" _nsfw: + respect: "اخف الوسائط ذات المحتوى الحساس" + ignore: "اعرض الوسائط ذات المحتوى الحساس" force: "اخف كل الوسائط" _mfm: + cheatSheet: "مرجع ملخص عن MFM" + intro: "MFM هي لغة ترميزية مخصصة يمكن استخدامها في عدّة أماكن في ميسكي. يمكنك مراجعة كل تعابيرها مع كيفية استخدامها هنا." mention: "أشر الى" + mentionDescription: "يمكنك الإشارة لمستخدم معيّن من خلال كتابة @ متبوعة باسم مستخدم." hashtag: "الوسوم" + hashtagDescription: "يمكنك تعيين وسم من خلال كتابة # متبوعة بالنص المطلوب." url: "الرابط" urlDescription: "يمكن عرض الروابط" link: "رابط" bold: "عريض" small: "صغير" + center: "وسط" quote: "اقتبس" emoji: "إيموجي مخصص" search: "البحث" + flip: "اقلب" + flipDescription: "يقلب المحتوى عموديًا أو أفقيًا" + jelly: "تأثير (هلام)" + jellyDescription: "يمنح المحتوى حركة هلامية." + tada: "تأثير (تادا)" + tadaDescription: "يمنح للمحتوى تأثير تادا" + jump: "تأثير (قفز)" + jumpDescription: "يمنح للمحتوى حركة قفز." + bounce: "تأثير (ارتداد)" + bounceDescription: "يمنح للمحتوى حركة ارتدادية" + x2: "كبير" + x3: "كبير جداً" + blur: "طمس" + font: "الخط" + rainbow: "قوس قزح" + rainbowDescription: "اجعل المحتوى يظهر بألوان الطيف" _reversi: gameSettings: "إعدادات اللعبة" chooseBoard: "اختر اللوح" blackOrWhite: "أسود/أبيض" blackIs: "{name} سيلعب بالأسود" + rules: "القوانين" botSettings: "خيارات الحسابات الآلية" + thisGameIsStartedSoon: "ستبدأ اللعبة خلال بضع ثوانٍ" + waitingForOther: "ينتظر دور الخصم" + waitingForMe: "ينتظر دورك" waitingBoth: "استعد" ready: "جاهز" cancelReady: "ألغ الجهوزية" @@ -698,10 +857,31 @@ _reversi: allGames: "كل الجولات" ended: "انتهت" playing: "يُلعب الآن" +_instanceTicker: + remote: "أظهر للمستخدمين البِعاد" +_serverDisconnectedBehavior: + reload: "إعادة تحميل تلقائية" + dialog: "أظهر مربع حوار التحذيرات" _channel: + create: "أنشئ قناة" + edit: "عدّل قناة" + setBanner: "عيّن اللافتة" + removeBanner: "أزل اللافتة" featured: "المتداوَلة" + owned: "قنواتي" + following: "متابَع" + usersCount: "{n} منتسب" + notesCount: "{n} ملاحظة" _menuDisplay: hide: "إخفاء" +_wordMute: + muteWords: "الكلمات المحظورة" + muteWordsDescription2: "احصر الكلمات المفتاحية بين بين شرطتين مائلتين لاستخدامها كتعابير نمطية" + softDescription: "اخف الملاحظات التي تستوف الشروط من الخيط الزمني." + hardDescription: "اخف الملاحظات التي تستوف الشروط من الخيط الزمني.بالإضافة إلى أن هذه الملاحظات ستبقى مخفية حتى وإن تغيرت الشروط." + soft: "لينة" + hard: "قاسية" + mutedNotes: "الملاحظات المكتومة" _theme: explore: "استكشف قوالب المظهر" install: "تنصيب قالب" @@ -709,19 +889,57 @@ _theme: code: "شيفرة القالب" description: "الوصف" installed: "تم تنصيب {name}" + installedThemes: "السمات المثبتة" + builtinThemes: "السمات المدمجة" + alreadyInstalled: "هذه السمة مثبتة سلفًا" + invalid: "تنسيق السمة غير صالح" make: "إنشاء قالب" + addConstant: "أضف ثابتًا" + constant: "ثابت" + defaultValue: "القيمة الافتراضية" + color: "اللون" + key: "مفتاح" + func: "دوال" + funcKind: "نوع الدالة" + argument: "معامل" alpha: "الشفافية" + inputConstantName: "أدخل اسمًا للثابت" + deleteConstantConfirm: "أمتأكد من حذف الثابت {const}؟" keys: + accent: "طابع لوني" + bg: "الخلفية" + fg: "النص" + indicator: "المؤشر" + panel: "اللوحة" + shadow: "الظل" + navBg: "خلفية الشريط الجانبي" + navFg: "نص الشريط الجانبي" + navHoverFg: "نص الشريط الجانبي (عند التمرير فوقه)" link: "رابط" hashtag: "وسم" mention: "أشر الى" renote: "أعد النشر" + divider: "فاصل" + scrollbarHandle: "مقبض شريط التمرير" + scrollbarHandleHover: "مقبض شريط التمرير (عند التمرير فوقه)" + infoWarnBg: "خلفية التحذير" + infoWarnFg: "نص التحذير" + toastBg: "خلفية الإشعارات" + toastFg: "نص الإشعارات" + buttonBg: "خلفية الأزرار" + buttonHoverBg: "خلفية الأزرار (عند التمرير فوقها)" + inputBorder: "حواف حقل الإدخال" + listItemHoverBg: "خلفية عناصر القائمة (عند التمرير فوقها)" + driveFolderBg: "خلفية مجلد قرص التخزين" messageBg: "خلفية المحادثة" _sfx: note: "الملاحظات" noteMy: "ملاحظتي" notification: "الإشعارات" chat: "المحادثة" + chatBg: "المحادثة (الخلفية)" + antenna: "الهوائيات" + channel: "إشعارات القنات" _ago: unknown: "مجهول" future: "المستقبَل" @@ -744,11 +962,27 @@ _tutorial: step1_2: "تدعى هذه الصفحة 'الخيط الزمني' وهي تحوي ملاحظات الأشخاص الذي تتابعهم مرتبة حسب تاريخ نشرها." step1_3: "خيطك الزمني فارغ حاليًا بما أنك لا تتابع أي شخص ولم تنشر أي ملاحظة." step2_1: "لننهي إعداد ملفك الشخصي قبل كتابة ملاحظة أو متابعة أشخاص." + step2_2: "أعطاء معلومات عن شخصيتك يمنح من له نفس إهتماماتك فرصة متابعتك والتفاعل مع ملاحظاتك." step3_1: "هل أنهيت إعداد حسابك؟" - step3_2: "إذا تاليًا للنشر ملاحظة. أنقر على أيقونة القلم في أعلى الشاشة" + step3_2: "إذا تاليًا لتنشر ملاحظة. أنقر على أيقونة القلم في أعلى الشاشة" + step3_3: "املأ النموذج وانقر الزرّ الموجود في أعلى اليمين للإرسال." + step3_4: "ليس لديك ما تقوله؟ إذا اكتب \"بدأتُ استخدم ميسكي\"." + step4_1: "هل نشرت ملاحظتك الأولى؟" + step4_2: "مرحى! يمكنك الآن رؤية ملاحظتك في الخط الزمني." + step5_1: "والآن، لنجعل الخط الزمني أكثر حيوية وذلك بمتابعة بعض المستخدمين." + step5_2: "تعرض صفحة {features} الملاحظات المتداولة في هذا المثيل ويتيح لك {Explore} العثور على المستخدمين الرائدين. اعثر على الأشخاص الذين يثيرون إهتمامك وتابعهم!" step5_3: "لمتابعة مستخدمين ادخل ملفهم الشخصي بالنقر على صورتهم الشخصية ثم اضغط زر 'تابع'." + step5_4: "إذا كان لدى المستخدم رمز قفل بجوار اسمه ، وجب عليك انتظاره ليقبل طلب المتابعة يدويًا." + step6_1: "الآن ستتمكن من رؤية ملاحظات المستخدمين المتابَعين في الخط الزمني." + step6_2: "يمكنك التفاعل بسرعة مع الملاحظات عن طريق إضافة \"تفاعل\"." + step6_3: "لإضافة تفاعل لملاحظة ، انقر فوق علامة \"+\" أسفل للملاحظة واختر الإيموجي المطلوب." + step7_1: "مبارك ! أنهيت الدورة التعليمية الأساسية لاستخدام ميسكي." + step7_2: "إذا أردت معرفة المزيد عن ميسكي زر {help}." + step7_3: "حظًا سعيدًا واستمتع بوقتك مع ميسكي! 🚀" _2fa: + registerDevice: "سجّل جهازًا جديدًا" registerKey: "تسجيل مفتاح أمان جديد" + step1: "أولًا ثبّت تطبيق استيثاق على جهازك (مثل {a} و{b})." _permissions: "read:account": "اعرض معلومات حسابك" "write:account": "تعديل معلومات حسابك" @@ -758,18 +992,35 @@ _permissions: "write:drive": "احذف أو عدّل محتويات قرص التخزين" "read:favorites": "اعرض المفضلة" "write:favorites": "عدّل المفضلة" + "read:following": "اعرض معلومات متابَعيك" + "read:messaging": "اعرض المحادثات" + "write:messaging": "اكتب أو احذف رسائل محادثة" + "read:mutes": "اعرض قائمة المستخدمين المكتومين" + "write:mutes": "عدّل قائمة المستخدمين المكتومين" + "write:notes": "أنشئ أو احذف ملاحظات" "read:notifications": "اظهر الإشعارات" + "write:notifications": "إدارة الإشعارات" "read:reactions": "اعرض تفاعلاتك" "write:reactions": "عدّل تفاعلاتك" "write:votes": "صوّت" "read:pages": "اعرض صفحاتك" "write:pages": "عدّل أو احذف صفحاتك" - "read:user-groups": "اعرض مجموعات المستخدمين" - "write:user-groups": "عدّل أو احذف مجموعات المستخدمين" + "read:user-groups": "اعرض فِرق المستخدمين" + "write:user-groups": "عدّل أو احذف فِرق المستخدمين" + "write:channels": "عدّل القنوات" "read:gallery": "اعرض المعرض" "write:gallery": "عدّل المعرض" _auth: shareAccess: "أتريد التفويض لـ \"{name}\" بالوصول لحسابك؟" + shareAccessAsk: "هل تخول لهذا التطبيق الوصول لحسابك؟" + permissionAsk: "يطلب التطبيق الأذون التالية" + pleaseGoBack: "رجاءً عد للتطبيق" + callback: "العودة للتطبيق" + denied: "رُفض الوصول" +_antennaSources: + all: "كل الملاحظات" + homeTimeline: "ملاحظات المستخدمين المتابَعين" + users: "ملاحظات مستخدمين محددين" _weekday: sunday: "الأحد" monday: "الإثنين" @@ -788,8 +1039,14 @@ _widgets: rss: "تدفق RSS" activity: "النشاط" photos: "الصور" + digitalClock: "ساعة رقمية" federation: "الفديرالية" + postForm: "أنشئ ملاحظة" + slideshow: "عرض الشرائح" + button: "زر" + onlineUsers: "المتّصلون" jobQueue: "قائمة الانتظار" + serverMetric: "إحصائيات الخادم" _cw: hide: "إخفاء" show: "عرض المزيد" @@ -818,11 +1075,16 @@ _poll: remainingMinutes: "{m} دقائق و {s} ثوانٍ متبقية" remainingSeconds: "{s} ثوانٍ متبقية" _visibility: - public: "للعامة" + public: "علني" + publicDescription: "ستكون ملاحظتك مرئية لكل المستخدمين" home: "الرئيسي" + homeDescription: "انشر في الخيط الزمني الرئيسي فقط" followers: "المتابِعون" + followersDescription: "اجعلها مرئية لمتابِعيك فقط" specified: "مباشرة" + specifiedDescription: "اجعلها مرئية لمستخدمين محددين" localOnly: "المحلي فقط" + localOnlyDescription: "ليس مرئيًا للمستخدمين البِعاد" _postForm: replyPlaceholder: "رد على هذه الملاحظة…" quotePlaceholder: "اقتبس هذه الملاحظة…" @@ -835,7 +1097,7 @@ _profile: name: "الإسم" username: "اسم المستخدم" description: "السيرة" - youCanIncludeHashtags: "يمكنك أيضًا إضافة وسوم إلى نبذتك التعريفية." + youCanIncludeHashtags: "يمكنك أيضًا إضافة وسوم إلى سيرتك التعريفية." metadata: "معلومات إضافية" metadataEdit: "عدّل المعلومات الإضافية" metadataDescription: "يُمكنك عرض 4 حقول معلومات في ملفك الشخصي" @@ -850,18 +1112,37 @@ _exportOrImport: blockingList: "المستخدمون المحجوبون" userLists: "القوائم" _charts: + usersIncDec: "اختلاف عدد المستخدمين" usersTotal: "مجموع عدد المستخدمين والمستخدمات" activeUsers: "المستخدمون النشطون" + notesIncDec: "اختلاف عدد الملاحظات" + localNotesIncDec: "اختلاف عدد الملاحظات المحلية" + remoteNotesIncDec: "اختلاف عدد الملاحظات البعيدة" notesTotal: "إجمالي الملاحظات" + filesIncDec: "اختلاف عدد الملفات" + filesTotal: "العدد الإجمالي للملفات" +_instanceCharts: + requests: "الطلبات" + users: "اختلاف عدد المستخدمين" + notes: "اختلاف عدد الملاحظات" + files: "اختلاف عدد الملفات" _timelines: home: "الرئيسي" local: "المحلي" social: "الاجتماعي" global: "الشامل" _rooms: + roomOf: "غرفة {user}" + translate: "أنقل" + rotate: "تدوير" + exit: "رجوع" + remove: "أزل" + clear: "أزل الكل" + clearConfirm: "أتريد إزالة كل الأثاث من الغرفة؟" leaveConfirm: "لديك تغييرات غير محفوظة. أتريد المتابعة دون حفظها؟" chooseImage: "اختر صورة" roomType: "نوع الغرفة" + carpetColor: "لون السّجاد" _roomType: default: "افتراضي" washitsu: "الأسلوب الياباني" @@ -872,59 +1153,311 @@ _rooms: desk: "مكتب" chair: "كرسي" chair2: "كرسي 2" + fan: "مروحة" pc: "حاسوب" + plant: "نبات زينة" + plant2: "نبات زينة 2" + eraser: "ممحاة" + pencil: "قلم رصاص" + pudding: "بودينغ" + book: "كتاب" + book2: "كتاب 2" + piano: "بيانو" + server: "خادم" + moon: "قمر" monitor: "شاشة التحكم" + keyboard: "لوحة مفاتيح" + wall-clock: "ساعة حائط" + photoframe: "إطار صورة" + cube: "مكعب" + tv: "تلفاز" + pinguin: "بطريق" + sofa: "أريكة" banknote: "أوراق نقدية" _pages: + newPage: "أنشئ صفحة جديدة" + editPage: "عدّل الصفحة" + readPage: "نُشّط عرض المصدر" + created: "نجح إنشاء الصفحة" + updated: "نجح تعديل الصفحة" + deleted: "نجح حذف الصفحة" + pageSetting: "إعدادات الصفحة" viewPage: "اعرض صفحاتك" like: "أعجبني" unlike: "أزل الإعجاب" my: "صفحاتي" + contents: "المحتوى" + alignCenter: "توسيط العناصر" + hideTitleWhenPinned: "اخف عنوان الصفحة عند تدبيسها في ملف الشخصي" + font: "الخط" + fontSerif: "Serif" + fontSansSerif: "Sans Serif" + selectType: "اختر النوع" + enterVariableName: "أدخل اسم المتغيّر" + variableNameIsAlreadyUsed: "هذا الاسم محجوز" + contentBlocks: "المحتوى" + inputBlocks: "مُدخل" + specialBlocks: "خاص" blocks: + text: "نص" image: "الصور" + button: "زرّ" + _if: + variable: "متغيّر" + post: "أنشئ ملاحظة" _post: text: "المحتوى" + textInput: "مُدخل نصي" + _textInput: + name: "اسم المتغير" + text: "العنوان" + default: "القيمة الافتراضية" + _textareaInput: + name: "اسم المتغير" + text: "العنوان" + default: "القيمة الافتراضية" + numberInput: "مُدخل رقمي" + _numberInput: + name: "اسم المتغير" + text: "العنوان" + default: "القيمة الافتراضية" + _canvas: + width: "العُرض" + height: "الإرتفاع" + note: "ملاحظة مضمّنة" + _note: + id: "معرّف الملاحظة" + detailed: "عرض مفصّل" + switch: "بدّل" + _switch: + name: "اسم المتغير" + text: "العنوان" + default: "القيمة الافتراضية" + counter: "العداد" + _counter: + name: "اسم المتغير" + text: "العنوان" + inc: "زِد" _button: + text: "العنوان" + colored: "ملوّن" + action: "الإجراء عند ضغط الزّر" _action: + dialog: "أظهر مربع حوار" _dialog: content: "المحتوى" + resetRandom: "صفِّر البذرة" + pushEvent: "أرسل حدثًا" + _pushEvent: + event: "اسم الحدث" + message: "إظهار رسالة عند التفعيل" + variable: "أرسل المتغيّر" + no-variable: "لا شيء" + _callAiScript: + functionName: "اسم الدالة" + radioButton: "الخيار " + _radioButton: + name: "اسم المتغير" + title: "العنوان" + values: "قائمة الخيارات (كل خيار في سطر لوحده)" + default: "القيمة الافتراضية" script: categories: + logical: "عمليّة منطقيّة" + operation: "حساب" + comparison: "مقارنة" + random: "عشوائي" + value: "القيم" + fn: "دوال" + convert: "تحويل" list: "القوائم" blocks: + text: "نص" + textList: "قائمة نصية" + _textList: + info: "اجعل كل مدخل في سطر لوحده" + strLen: "طول النص" + _strLen: + arg1: "نص" + strPick: "استخرج محرفًا" + _strPick: + arg1: "نص" + arg2: "موضع المحرف" + strReplace: "استبدال النّص" _strReplace: arg1: "نص" + arg2: "استُبدِل بـ" arg3: "استُبدِل بـ" + strReverse: "اقلب النص" + _strReverse: + arg1: "نص" _join: arg1: "القوائم" arg2: "فاصل" add: "إضافة" + _add: + arg1: "أ" + arg2: "ب" + subtract: "اطرح" + _subtract: + arg1: "أ" + arg2: "ب" + multiply: "اضرب" + _multiply: + arg1: "أ" + arg2: "ب" + divide: "اقسم" + _divide: + arg1: "أ" + arg2: "ب" + mod: "الباقي" + _mod: + arg1: "أ" + arg2: "ب" + round: "تقريب عدد عشري" + _round: + arg1: "رقم" + eq: "أ و ب متساويان" + _eq: + arg1: "أ" + arg2: "ب" + notEq: "أ و ب مختلفان" + _notEq: + arg1: "أ" + arg2: "ب" + and: "أ و ب" + _and: + arg1: "أ" + arg2: "ب" + or: "أ أو ب" + _or: + arg1: "أ" + arg2: "ب" + lt: "أ أصغر من ب" + _lt: + arg1: "أ" + arg2: "ب" + gt: "أ أكبر من ب" + _gt: + arg1: "أ" + arg2: "ب" + ltEq: "أ أصغر من أو يساوي ب" + _ltEq: + arg1: "أ" + arg2: "ب" + gtEq: "أ أكبر من أو يساوي ب" + _gtEq: + arg1: "أ" + arg2: "ب" + if: "فرع" + random: "عشوائي" + rannum: "رقم عشوائي" + _rannum: + arg1: "أدنى قيمة" + arg2: "أقصى قيمة" + randomPick: "اختر عشوائيًا من القائمة" _randomPick: arg1: "القوائم" + dailyRandom: "عشوائي (يتغير مرة يوميًا لكل مستخدم)" + dailyRannum: "رقم عشوائي (يتغير مرة يوميًا لكل مستخدم)" + _dailyRannum: + arg1: "أدنى قيمة" + arg2: "أقصى قيمة" + dailyRandomPick: "اختيار عشوائي من قائمة (يتغير مرة يوميًا لكل مستخدم)" _dailyRandomPick: arg1: "القوائم" + seedRandom: "عشوائي (عبر بذرة)" + _seedRandom: + arg1: "البذرة" + seedRannum: "رقم عشوائي (عبر بذرة)" + _seedRannum: + arg1: "البذرة" + arg2: "أدنى قيمة" + arg3: "أقصى قيمة" + seedRandomPick: "اختيار عشوائي من القائمة (عبر بذرة)" _seedRandomPick: + arg1: "البذرة" arg2: "القوائم" + DRPWPM: "اختيار عشوائي من قائمة الاحتمالات (تتغير مرة يوميًا لكل مستخدم)" + _DRPWPM: + arg1: "قائمة نصية" + pick: "اختر من القائمة" _pick: arg1: "القوائم" + arg2: "الموضع" + listLen: "طول القائمة" _listLen: arg1: "القوائم" + number: "رقم" + stringToNumber: "حوّل نصًا إلى رقم" + _stringToNumber: + arg1: "نص" + numberToString: "حوّل رقمًا إلى نص" + _numberToString: + arg1: "رقم" + _splitStrByLine: + arg1: "نص" + ref: "متغيّر" + aiScriptVar: "متغيّر AiScript" + fn: "دالة" + _fn: + slots: "خانات" + arg1: "المُخرج" + for: "حلقة تكرار" + _for: + arg1: "عدد مرات التكرار" + arg2: "الإجراء" + typeError: "الخانة {slot} تقبل \"{expect}\" لكن القيمة المعطاة هي \"{actual}\"!" + thereIsEmptySlot: "الخانة {slot} فارغة!" types: + string: "نص" + number: "رقم" array: "القوائم" + stringArray: "قائمة نصية" + emptySlot: "خانة فارغة" + enviromentVariables: "متغيرات البيئة" + pageVariables: "متغيرات الصفحة" + argVariables: "خانة إدخال" +_relayStatus: + requesting: "مُعلّق" + accepted: "مقبول" + rejected: "مرفوض" _notification: + fileUploaded: "نجح رفع الملف" + youGotMention: "{name} أشار إليك" + youGotReply: "ردّ عليك {name}" + youGotQuote: "اقتبس منك {name}" + youRenoted: "إعادت نشر من {name}" youGotPoll: "شارك {name} في استطلاع الرأي" youGotMessagingMessageFromUser: "لقد تلقيت رسالة مِن {name}" youGotMessagingMessageFromGroup: "لقد أرسِلَت رسالة إلى الفريق {name}" youWereFollowed: "يتابعك" - youWereInvitedToGroup: "دُعيت إلى مجموعة" + youReceivedFollowRequest: "تلقيتَ طلب متابعة" + yourFollowRequestAccepted: "قُبل طلب المتابعة" + youWereInvitedToGroup: "دُعيت إلى فريقٍ" _types: - follow: "المتابَعون" - mention: "أشر الى" + all: "الكل" + follow: "متابِعون جدد" + mention: "الإشارات" + reply: "الردود" renote: "أعد النشر" - quote: "اقتبس" - reaction: "تفاعل" + quote: "الاقتباسات" + reaction: "التفاعلات" + receiveFollowRequest: "طلبات المتابعة المتلقاة" + followRequestAccepted: "طلبات المتابعة المقبولة" + app: "إشعارات التطبيقات المرتبطة" _deck: + alwaysShowMainColumn: "أظهر العمود الرئيسي دائمًا" + columnAlign: "حاذِ الأعمدة" + addColumn: "أضف عمودًا" + swapLeft: "حرّك لليسار" + swapRight: "حرّك لليمين" + swapUp: "حرّك لأعلى" + swapDown: "حرّك لأسفل" + profile: "الملف الشخصي" _columns: + main: "الرئيسي" + widgets: "الودجات" notifications: "الإشعارات" tl: "الخيط الزمني" antenna: "الهوائيات" diff --git a/locales/cs-CZ.yml b/locales/cs-CZ.yml index 1897f3f2aa..ae7a22b7f3 100644 --- a/locales/cs-CZ.yml +++ b/locales/cs-CZ.yml @@ -52,6 +52,7 @@ searchUser: "Vyhledat uživatele" reply: "Odpovědět" loadMore: "Zobrazit více" showMore: "Zobrazit více" +youGotNewFollower: "Máte nového následovníka" mention: "Zmínění" mentions: "Zmínění" importAndExport: "Import a export" @@ -163,6 +164,7 @@ clearQueue: "Vyčistit frontu" clearQueueConfirmTitle: "Jste si jisti že zrušit všechny úlohy ve frontě?" clearCachedFiles: "Vyprázdnit mezipaměť" blockedInstances: "Blokované instance" +noUsers: "Žádní uživatelé" editProfile: "Upravit můj profil" pinLimitExceeded: "Nemůžete připnout další poznámky." intro: "Instalace Misskey byla dokončena! Prosím vytvořte admina." @@ -170,6 +172,7 @@ done: "Hotovo" processing: "Zpracovávám" preview: "Náhled" default: "Výchozí" +noCustomEmojis: "Bez Emoji" blocked: "Blokováno" suspended: "Suspendováno" all: "Vše" @@ -402,6 +405,9 @@ smtpPass: "Heslo" clearCache: "Vyprázdnit mezipaměť" info: "Informace" user: "Uživatelé" +_email: + _follow: + title: "Máte nového následovníka" _mfm: mention: "Zmínění" quote: "Citovat" @@ -464,6 +470,7 @@ _pages: types: array: "Seznamy" _notification: + youWereFollowed: "Máte nového následovníka" youWereInvitedToGroup: "Pozvat do skupiny" _types: follow: "Sledovaní" diff --git a/locales/de-DE.yml b/locales/de-DE.yml index 311500e85a..39748e2b23 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -620,6 +620,8 @@ reportAbuse: "Melden" reportAbuseOf: "{name} melden" fillAbuseReportDescription: "Bitte gib zusätzliche Informationen zu dieser Meldung an. Falls es sich um eine spezielle Notiz handelt, bitte gib dessen URL an." abuseReported: "Die Meldung wurde versendet. Vielen Dank." +reporteeOrigin: "Herkunft des Gemeldeten" +reporterOrigin: "Herkunft des Meldenden" send: "Senden" abuseMarkAsResolved: "Meldung als gelöst markieren" openInNewTab: "In neuem Tab öffnen" @@ -795,12 +797,27 @@ itsOff: "Ausgeschaltet" emailRequiredForSignup: "Angaben einer Email-Adresse als benötigt markieren" unread: "Ungelesen" filter: "Filter" +controlPanel: "Systemsteuerung" manageAccounts: "Benutzerkonten verwalten" makeReactionsPublic: "Reaktionsverlauf veröffentlichen" makeReactionsPublicDescription: "Jeder wird die Liste deiner gesendeten Reaktionen einsehen können." classic: "Classic" muteThread: "Thread stummschalten" unmuteThread: "Threadstummschaltung aufheben" +ffVisibility: "Sichtbarkeit von Gefolgten/Followern" +ffVisibilityDescription: "Konfiguriere wer sehen kann, wem du folgst sowie wer dir folgt." +continueThread: "Weiteren Threadverlauf anzeigen" +deleteAccountConfirm: "Dein Benutzerkonto wird unwiderruflich gelöscht. Trotzdem fortfahren?" +_emailUnavailable: + used: "Diese Email-Adresse wird bereits verwendet" + format: "Das Format dieser Email-Adresse ist ungültig" + disposable: "Wegwerf-Email-Adressen können nicht verwendet werden" + mx: "Dieser Email-Server ist ungültig" + smtp: "Dieser Email-Server antwortet nicht" +_ffVisibility: + public: "Öffentlich" + followers: "Nur für Follower sichtbar" + private: "Privat" _signup: almostThere: "Fast geschafft" emailAddressInfo: "Bitte gib deine Email-Adresse ein." @@ -812,13 +829,6 @@ _accountDelete: requestAccountDelete: "Löschung des Benutzerkontos anfordern" started: "Löschung wurde eingeleitet." inProgress: "Löschung in Bearbeitung" -_docs: - continueReading: "Mehr lesen" - features: "Funktionen" - generalTopics: "Allgemeine Themen" - advancedTopics: "Erweiterte Themen" - admin: "Administration" - translateWarn: "Dies ist ein übersetztes Dokument. Es kann zu Unterschieden mit dem Original kommen." _ad: back: "Zurück" reduceFrequencyOfThisAd: "Diese Werbung weniger anzeigen" diff --git a/locales/en-US.yml b/locales/en-US.yml index 36d0a48ea6..37da6fdc95 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -620,6 +620,8 @@ reportAbuse: "Report" reportAbuseOf: "Report {name}" fillAbuseReportDescription: "Please fill in details regarding this report. If it is about a specific note, please include its URL." abuseReported: "Your report has been sent. Thank you very much." +reporteeOrigin: "Reportee Origin" +reporterOrigin: "Reporter Origin" send: "Send" abuseMarkAsResolved: "Mark report as resolved" openInNewTab: "Open in new tab" @@ -802,6 +804,20 @@ makeReactionsPublicDescription: "This will make the list of all your past reacti classic: "Classic" muteThread: "Mute thread" unmuteThread: "Unmute thread" +ffVisibility: "Follows/Followers Visibility" +ffVisibilityDescription: "Allows you to configure who can see who you follow and who follows you." +continueThread: "View thread continuation" +deleteAccountConfirm: "This will irreversibly delete your account. Proceed?" +_emailUnavailable: + used: "This email address is already being used" + format: "The format of this email address is invalid" + disposable: "Disposable email addresses may not be used" + mx: "This email server is invalid" + smtp: "This email server is not responding" +_ffVisibility: + public: "Public" + followers: "Visible to followers only" + private: "Private" _signup: almostThere: "Almost there" emailAddressInfo: "Please enter your email address." @@ -813,13 +829,6 @@ _accountDelete: requestAccountDelete: "Request account deletion" started: "Deletion has been started." inProgress: "Deletion is currently in progress" -_docs: - continueReading: "Read more" - features: "Features" - generalTopics: "General topics" - advancedTopics: "Advanced Topics" - admin: "Administration" - translateWarn: "This is a translated document. Its contents may differ from the original." _ad: back: "Back" reduceFrequencyOfThisAd: "Show this ad less" diff --git a/locales/eo-UY.yml b/locales/eo-UY.yml index 88bf7ab2f4..7b641303b1 100644 --- a/locales/eo-UY.yml +++ b/locales/eo-UY.yml @@ -2,7 +2,7 @@ _lang_: "Esperanto" headlineMisskey: "Jen la reto konektata de notoj" introMisskey: "Bonvenon! Misskey estas malfermitkoda malcentraliza etbloga servo.\nKreu \"noto\"n por paroli vian penson al iuj ĉirkaŭ vi. 📡\nLa funkcion \"reago\" ebligas esprimi rapide vian senton pri ies noto en Fediverso. 👍\nBonvole esploru novan mondon. 🚀" -monthAndDay: "{{day}}/{{month}}" +monthAndDay: "La {day}a de la {month}a" search: "Serĉi" notifications: "Sciigoj" username: "Uzantnomo" @@ -23,7 +23,7 @@ otherSettings: "Aliaj agordoj" openInWindow: "Malfermi en fenestro" profile: "Profilo" timeline: "Templinio" -noAccountDescription: "Neniu priskribo" +noAccountDescription: "Neniu sinprezento" login: "Ensaluti" loggingIn: "Ensalutado…" logout: "Elsaluti" @@ -36,15 +36,15 @@ favorite: "Preferi" favorites: "Preferaĵoj" unfavorite: "Malpreferi" favorited: "Aldonita al via listo de preferaĵoj." -alreadyFavorited: "Ĝi jam estis aldonita al via listo de preferaĵoj." -cantFavorite: "Ne aldonita al via listo de preferaĵoj." +alreadyFavorited: "Jam aldonita al via listo de preferaĵoj." +cantFavorite: "Ĝi ne povis esti aldonita al via listo de preferaĵoj." pin: "Alpingli" unpin: "Depingli" copyContent: "Kopii enhavon" copyLink: "Kopii ligilon" delete: "Forviŝi" -deleteAndEdit: "Redakti foriginte" -deleteAndEditConfirm: "Ĉu vi certas, ke vi volas forigi kaj redakti la noton? Tio forviŝos reagojn, plusendojn, kaj respondojn ĉiujn de ĝi." +deleteAndEdit: "Forviŝi kaj redakti" +deleteAndEditConfirm: "Ĉu vi certas ke vi volas redakti forviŝinte la noton? Tio forviŝos ankaŭ ĉiujn reagojn, plusendojn, kaj respondojn apartenantajn al ĝi." addToList: "Aldoni al listo" sendMessage: "Sendi mesaĝon" copyUsername: "Kopii uzantnomon" @@ -56,7 +56,7 @@ youGotNewFollower: "eksekvis vin" receiveFollowRequest: "Peto de sekvado estas ricevita" followRequestAccepted: "La peto de sekvado akceptita" mention: "Mencioj" -mentions: "Al vi" +mentions: "Mencioj" directNotes: "Rekte senditaj" importAndExport: "Importi/eksporti" import: "Importi" @@ -79,11 +79,13 @@ somethingHappened: "Problemo okazis" retry: "Provi denove" enterListName: "Entajpu nomon de la listo" privacy: "Privateco" +makeFollowManuallyApprove: "Eksekvi vin devas peti al vi" defaultNoteVisibility: "Implicitaĵo de videbleco" follow: "Sekvi" followRequest: "Peti de sekvado" followRequests: "Petoj de sekvado" unfollow: "Ne plu sekvi" +followRequestPending: "Atendado akcepti vian peton de eksekvado" enterEmoji: "Entajpu emoĵion" renote: "Plusendi la noton" unrenote: "Malfari plusendadon" @@ -98,11 +100,12 @@ clickToShow: "Klaku por malkaŝu" sensitive: "Enhavo ne estas deca por laborejo (NSFW)" add: "Aldoni" reaction: "Reagoj" -rememberNoteVisibility: "Rememoru videblecon de la noto laste sendita " +reactionSettingDescription: "Agordi la reagojn kiujn vi volas prefere montrigi ĉe la elektilo de reagoj" +rememberNoteVisibility: "Rememori la agordon de videbleco de la noto laste sendita " attachCancel: "Deigi aldonaĵon" markAsSensitive: "Troviĝi NSFW" unmarkAsSensitive: "Ne troviĝi NSFW" -enterFileName: "Entajpu nomon de dosiero" +enterFileName: "Entajpu nomon de la dosiero" mute: "Silentigi" unmute: "Malsilentigi" block: "Bloki" @@ -127,7 +130,7 @@ addEmoji: "Aldoni emoĵion" settingGuide: "Agordaj rekomendoj" cacheRemoteFiles: "Stapli transajn dosierojn" flagAsBot: "Agordo por robota uzanto" -flagAsCat: "Agordo de katiĝa uzanto" +flagAsCat: "Agi kat-iĝon" addAccount: "Aldoni konton" showOnRemote: "Vidi ĉe la surloka nodo" general: "Ĝenerala" @@ -141,13 +144,14 @@ host: "Gastigo" selectUser: "Elekti uzanton" recipient: "Ricevonto" annotation: "Komentarioj" -federation: "Kunfederaĵo" +federation: "Federaĵo" instances: "Nodoj" latestRequestSentAt: "Lastatempa sendo" latestRequestReceivedAt: "Lastatempa ricevo" latestStatus: "Laŭstato" -perHour: "Po horo" -perDay: "Po tago" +charts: "Diagramoj" +perHour: "por horo" +perDay: "por tago" blockThisInstance: "Bloki la nodon" operations: "Agoj" software: "Programaro" @@ -156,36 +160,37 @@ metadata: "Metadatumoj" withNFiles: "{n} dosiero(j)" monitor: "Monitoro" network: "Reto" -disk: "Diskilo" +disk: "Disko" instanceInfo: "Informoj pri la nodo" statistics: "Statistikoj" clearCachedFiles: "Malplenigi la staplon" clearCachedFilesConfirm: "Ĉu vi certas, ke vi volas forviŝi ĉiujn transajn dosierojn en la staplo?" blockedInstances: "Blokitaj nodoj" -muteAndBlock: "Silentigitoj kaj blokitoj" mutedUsers: "Silentigitaj uzantoj" blockedUsers: "Blokitaj uzantoj" -noUsers: "Sen uzantoj" +noUsers: "Neniu uzanto" editProfile: "Redakti profilon" noteDeleteConfirm: "Ĉu vi certas ke vi volas forviŝi la noton?" -pinLimitExceeded: "Vi povas alpingli ne pli noton." +pinLimitExceeded: "Vi ne povas alpingli pli" done: "Fini" processing: "Prilaborado…" preview: "Antaŭmontro" +default: "Defaŭlta" noCustomEmojis: "Neniu emoĵio" -federating: "Nun kunfederanta" -blocked: "Blokita" -suspended: "Suspendita" +noJobs: "Neniu laboro" +federating: "Federantaj" +blocked: "Blokitaj" +suspended: "Suspenditaj" all: "Ĉiuj" -subscribing: "Abonata" -publishing: "Al kiu dissendas" +subscribing: "Abonitaj" +publishing: "Abonintaj" notResponding: "Alvokato ne disponeblas" instanceFollowing: "Sekvatoj en la nodo" instanceFollowers: "Sekvantoj el la nodo" -instanceUsers: "Uzantoj de tiu ĉi nodo" +instanceUsers: "Uzantoj de la nodo" changePassword: "Ŝanĝi pasvorton" security: "Sekureco" -retypedNotMatch: "Enigitoj ne estas konformaj." +retypedNotMatch: "La enigitoj ne estas konformaj." currentPassword: "Aktuala pasvorto" newPassword: "Nova pasvorto" newPasswordRetype: "Reentajpu la novan pasvorton" @@ -193,38 +198,47 @@ attachFile: "Aldoni dosieron" more: "Plu!" featured: "Maksimumi" usernameOrUserId: "Uzantnomo aŭ identigilo de uzanto" -noSuchUser: "Neniuj uzantoj trovitaj." +noSuchUser: "Neniuj uzantoj trovitaj" lookup: "Informpeti" announcements: "Novaĵoj" -imageUrl: "URL de bildo" +imageUrl: "URL de la bildo" remove: "Forigi" -removed: "Forviŝis" +removed: "Forigita" removeAreYouSure: "Ĉu vi certas ke vi volas forigi \"{x}\"'(o)n?" deleteAreYouSure: "Ĉu vi certas ke vi volas forviŝi \"{x}\"'(o)n?" +resetAreYouSure: "Ĉu vi certas restarigi?" saved: "Konservita" messaging: "Retbabili" upload: "Alŝuti" fromDrive: "De la disko" fromUrl: "De URL" uploadFromUrl: "Alŝuti de URL" -uploadFromUrlDescription: "URL de dosiero kiun vi volas alŝuti" +uploadFromUrlDescription: "URL de la dosiero kiun vi volas alŝuti" +uploadFromUrlRequested: "La alŝutado estis patita" explore: "Esplori" games: "Miskiaj Ludoj" messageRead: "Legita" +noMoreHistory: "Ne plu de la historio" startMessaging: "Komenci babiladon" nUsersRead: "Legita de {n} homoj" +agreeTo: "Mi akceptas {0}'(o)n" tos: "Kondiĉoj de uzado" start: "Komenciĝi" home: "Hejma" -remoteUserCaution: "Ĉi tiuj infomoj ne estas tute ekzaktaj pro transa uzanto." +remoteUserCaution: "Ĉi tiuj infomoj estas ne tute ekzaktaj pro transa uzanto." activity: "Aktiveco" images: "Bildoj" birthday: "Naskiĝdato" +yearsOld: "{age} jaroj aĝa" registeredDate: "Dato de registriĝo" location: "Loko" theme: "Koloraro" +themeForLightMode: "Luma kolararo en la luma modo" +themeForDarkMode: "Malluma kolararo en la malluma modo" light: "Luma" dark: "Malluma" +lightThemes: "Luma koloraro" +darkThemes: "Malluma koloraro" drive: "Disko" fileName: "Dosiernomo" selectFile: "Elekti dosieron" @@ -240,15 +254,18 @@ addFile: "Aldoni dosieron" emptyDrive: "La disko malplenas" emptyFolder: "La dosierujo malplenas" unableToDelete: "Ne forigebla" -inputNewFileName: "Entajpu nova nomon de la dosiero" -inputNewFolderName: "Entajpu nova nomon de la dosierujo" +inputNewFileName: "Entajpu novan nomon de la dosiero" +inputNewDescription: "Entajpu novan priskribon" +inputNewFolderName: "Entajpu novan nomon de la dosierujo" hasChildFilesOrFolders: "La dosierujo ne estas forviŝebla, ĉar ĝi ne malplenas." copyUrl: "Kopii URL" rename: "Alinomi" avatar: "Ikono" banner: "Standardo" nsfw: "Enhavo ne estas deca por laborejo (NSFW)" +disconnectedFromServer: "Malkonektita de servilo" reload: "Reŝargi" +doNothing: "Ignori" watch: "Observi" unwatch: "Malobservi" accept: "Permesi" @@ -265,6 +282,7 @@ dayX: "{day}a" monthX: "La {month}a monato" yearX: "La jaro {year}" pages: "Paĝoj" +integration: "Integri" connectService: "Konekti" disconnectService: "Farkonektiĝi" enableLocalTimeline: "Ebligi lokan templinion" @@ -281,6 +299,8 @@ basicInfo: "Baza informo" pinnedUsers: "Alpinglita uzanto" pinnedPages: "Alpinglitaj paĝoj" pinnedNotes: "Alpinglita noto" +hcaptcha: "hCaptcha" +enableHcaptcha: "Ebligi hCaptcha" hcaptchaSiteKey: "Reteja ŝlosilo" hcaptchaSecretKey: "Sekreta ŝlosilo" recaptcha: "reCAPTCHA" @@ -290,6 +310,7 @@ recaptchaSecretKey: "Sekreta ŝlosilo" antennas: "Antenoj" manageAntennas: "Administri antenojn" name: "Nomo" +antennaSource: "Fonto de la anteno" notifyAntenna: "Oni sciigos novajn notojn" withFileAntenna: "Nur kun aldonaĵo" withReplies: "Inkluzive respondoj" @@ -311,6 +332,7 @@ userList: "Listoj" about: "Informoj" aboutMisskey: "Pri Misskey" administrator: "Administranto" +token: "Ĵetono" twoStepAuthentication: "Dua-faktora aŭtentiko" moderator: "Kontrolisto" nUsersMentioned: "{n} uzanto(j) menciis" @@ -331,6 +353,8 @@ close: "Fermi" group: "Grupo" groups: "Grupoj" createGroup: "Krei grupon" +ownedGroups: "Administrataj grupoj" +joinedGroups: "La grupoj kiujn la uzanto aliĝis" invites: "Inviti" groupName: "Grupa nomo" members: "Membroj" @@ -390,6 +414,7 @@ showInPage: "Vidi en paĝo" popout: "Superigi" volume: "Laŭteco" masterVolume: "Baza laŭteco" +details: "Detaloj" chooseEmoji: "Elekti emoĵion" recentUsed: "Lastatempaj uzitaj" install: "Instali" @@ -400,11 +425,13 @@ installedDate: "Dato de instalado" lastUsedDate: "Lastfoje uzita je" state: "Stato" sort: "Ordigado" +scratchpad: "Malneta redaktilo" output: "Elmeto" script: "Skripto" disablePagesScript: "Malebligi AiScripto en la paĝoj" deleteAllFiles: "Forviŝi ĉiujn dosierojn" deleteAllFilesConfirm: "Ĉu vi certas, ke vi volas forviŝi ĉiujn dosierojn?" +removeAllFollowing: "Ĉesi sekvi ĉiujn sekvatojn" userSuspended: "Ĉi tiu uzanto estas flostigita." userSilenced: "Ĉi tiu uzanto estas mutigita." menu: "Menuo" @@ -512,7 +539,7 @@ editCode: "Redakti kodon" emailNotification: "Sciigoj per retpoŝto" inChannelSearch: "Serĉi en kanalo" useReactionPickerForContextMenu: "Malfermi reago-elektilon per dekstro-klaki" -typingUsers: "{users} nun entajpas…" +typingUsers: "{users} nun skribas…" clear: "Vakigi" goBack: "Reiri antaŭ" addDescription: "Priskribi" @@ -544,12 +571,12 @@ translate: "Traduki" translatedFrom: "Tradukita el {x}" controlPanel: "Ŝaltpodio" classic: "Klasika" -_docs: - continueReading: "Legi plu" - features: "Funkcioj" - admin: "Administro" +_signup: + emailAddressInfo: "Entajpu vian retpoŝton" _ad: back: "Nuligi" +_forgotPassword: + enterEmail: "Entajpu la retpoŝton kiun vi registrigis al via konto. Ligilo por restarigi pasvorton estos sendita al la retpoŝto." _gallery: liked: "Ŝatitaj notoj" like: "Ŝati" @@ -648,7 +675,7 @@ _ago: secondsAgo: "Antaŭ {n} sekundo(j)" minutesAgo: "Antaŭ {n} minutoj" hoursAgo: "Antaŭ {n} horo(j)" - daysAgo: "Antaŭ {n} tagoj" + daysAgo: "Antaŭ {n} tago(j)" weeksAgo: "Antaŭ {n} semajnoj" monthsAgo: "Antaŭ {n} monatoj" yearsAgo: "Antaŭ {n} jaroj" @@ -702,7 +729,7 @@ _widgets: timeline: "Templinio" clock: "Horloĝo" activity: "Aktiveco" - federation: "Kunfederaĵo" + federation: "Federaĵo" slideshow: "Bildoprezento" button: "Butono" onlineUsers: "Surkonektita uzanto" @@ -761,6 +788,8 @@ _timelines: _rooms: translate: "Movi" chooseImage: "Elekti bildon" + _roomType: + default: "Defaŭlta" _furnitures: bed: "Lito" low-table: "Malaltotablo" @@ -790,10 +819,12 @@ _pages: featured: "Ravaĵoj" contents: "Enhavo" content: "Paĝo en bloko" + title: "Temlinio" url: "URL de paĝo" alignCenter: "Centrigi" chooseBlock: "Aldoni blokon" contentBlocks: "Enhavo" + inputBlocks: "Enigo" blocks: text: "Teksto" textarea: "Areo de teksto" @@ -802,7 +833,11 @@ _pages: _post: canvasId: "Kanvasa identigilo" textInput: "Enmeto el teksto" + _textInput: + text: "Titolo" textareaInput: "Enmeto el teksto en multaj linioj" + _textareaInput: + text: "Titolo" numberInput: "Nombra enmeto" _numberInput: text: "Titolo" @@ -810,6 +845,8 @@ _pages: id: "Kanvasa identigilo" _note: id: "Identigilo de noto" + _switch: + text: "Titolo" _counter: text: "Titolo" _button: @@ -817,6 +854,8 @@ _pages: _action: _pushEvent: event: "Nomo de la evento" + _radioButton: + title: "Titolo" script: categories: text: "Manipulo de teksto" @@ -862,6 +901,9 @@ _pages: stringArray: "List de teksto" emptySlot: "Malplena junto" argVariables: "Eniga junto" +_relayStatus: + requesting: "Atendado de aprobon" + accepted: "Konfirmita" _notification: fileUploaded: "La dosiero sukcese alŝutiĝis." youGotMention: "{name} mencis" @@ -891,5 +933,5 @@ _deck: tl: "Templinio" antenna: "Antenoj" list: "Listoj" - mentions: "Al vi" + mentions: "Mencioj" direct: "Rekte" diff --git a/locales/es-ES.yml b/locales/es-ES.yml index c55a00b821..3421c64389 100644 --- a/locales/es-ES.yml +++ b/locales/es-ES.yml @@ -739,8 +739,6 @@ resolved: "Resuelto" unresolved: "Sin resolver" _accountDelete: accountDelete: "Eliminar Cuenta" -_docs: - admin: "Administrar" _ad: back: "Deseleccionar" _gallery: diff --git a/locales/it-IT.yml b/locales/it-IT.yml index fc9060852d..fc032e068c 100644 --- a/locales/it-IT.yml +++ b/locales/it-IT.yml @@ -745,10 +745,8 @@ global: "Federata" sent: "Inviare" hashtags: "Hashtag" troubleshooting: "Risoluzione problemi" -_docs: - continueReading: "Leggi di più" - features: "Funzionalità" - admin: "Gestione" +_ffVisibility: + public: "Pubblico" _ad: back: "Indietro" reduceFrequencyOfThisAd: "Visualizza questa pubblicità meno spesso" diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 0183dbfc9f..e6bdfcd81b 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -806,6 +806,7 @@ muteThread: "スレッドをミュート" unmuteThread: "スレッドのミュートを解除" ffVisibility: "つながりの公開範囲" ffVisibilityDescription: "自分のフォロー/フォロワー情報の公開範囲を設定できます。" +continueThread: "さらにスレッドを見る" deleteAccountConfirm: "アカウントが削除されます。よろしいですか?" _emailUnavailable: diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml index 0767e60c81..b73be17035 100644 --- a/locales/ja-KS.yml +++ b/locales/ja-KS.yml @@ -653,8 +653,6 @@ low: "低い" global: "グローバル" sent: "送信" hashtags: "ハッシュタグ" -_docs: - admin: "管理" _ad: back: "戻る" _gallery: diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index 66850335be..10a9b6e3e1 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -788,6 +788,8 @@ lastCommunication: "마지막 통신" resolved: "해결됨" unresolved: "해결되지 않음" controlPanel: "제어판" +_ffVisibility: + public: "게시" _accountDelete: accountDelete: "계정 삭제" mayTakeTime: "계정 삭제는 서버에 부하를 가하기 때문에, 작성한 콘텐츠나 업로드한 파일의 수가 많으면 완료까지 시간이 걸릴 수 있습니다." @@ -795,13 +797,6 @@ _accountDelete: requestAccountDelete: "계정 삭제 요청" started: "삭제 작업이 시작되었습니다." inProgress: "삭제 진행 중" -_docs: - continueReading: "계속 읽기" - features: "기능" - generalTopics: "일반 주제" - advancedTopics: "심화 주제" - admin: "관리" - translateWarn: "이 문서는 번역되었기 때문에 원본과는 내용이 다를 수 있습니다." _ad: back: "뒤로" reduceFrequencyOfThisAd: "이 광고의 표시 빈도 낮추기" diff --git a/locales/nl-NL.yml b/locales/nl-NL.yml index 483e861c5a..7a3c568f6f 100644 --- a/locales/nl-NL.yml +++ b/locales/nl-NL.yml @@ -1,3 +1,5 @@ --- _lang_: "Nederlands" headlineMisskey: "Netwerk verbonden door notities" +muteThread: "Discussies dempen " +unmuteThread: "Dempen van discussie ongedaan maken" diff --git a/locales/pl-PL.yml b/locales/pl-PL.yml index 379f06dd1b..5e1fba8382 100644 --- a/locales/pl-PL.yml +++ b/locales/pl-PL.yml @@ -738,8 +738,8 @@ ratio: "Stosunek" global: "Globalna" sent: "Wyślij" hashtags: "Hashtag" -_docs: - admin: "Zarządzanie" +_ffVisibility: + public: "Publikuj" _ad: back: "Wróć" reduceFrequencyOfThisAd: "Pokazuj tę reklamę rzadziej" diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml index db0b7e84eb..1eb6dff0ef 100644 --- a/locales/ru-RU.yml +++ b/locales/ru-RU.yml @@ -620,6 +620,8 @@ reportAbuse: "Жалоба" reportAbuseOf: "Пожаловаться на пользователя {name}" fillAbuseReportDescription: "Опишите, пожалуйста, причину жалобы подробнее. Если речь о конкретной заметке, будьте добры приложить ссылку на неё." abuseReported: "Жалоба отправлена. Большое спасибо за информацию." +reporteeOrigin: "Куда сообщать" +reporterOrigin: "Сообщено" send: "Отправить" abuseMarkAsResolved: "Отметить жалобу как решённую" openInNewTab: "Открыть в новой вкладке" @@ -766,6 +768,7 @@ middle: "Средне" low: "Низкий" emailNotConfiguredWarning: "Не указан адрес электронной почты" ratio: "Соотношение" +previewNoteText: "Предварительный просмотр текста" customCss: "Индивидуальный CSS" customCssWarn: "Используйте эту настройку только если знаете, что делаете. Ошибки здесь чреваты тем, что сайт перестанет нормально работать у вас." global: "Всеобщая" @@ -780,19 +783,43 @@ learnMore: "Подробнее" misskeyUpdated: "Misskey обновился!" whatIsNew: "Что новенького?" translate: "Перевод" +translatedFrom: "{x}Перевод с английского" accountDeletionInProgress: "В настоящее время выполняется удаление учетной записи" usernameInfo: "Имя, которое отличает вашу учетную запись от других на этом сервере. Вы можете использовать алфавит (a~z, A~Z), цифры (0~9) или символы подчеркивания (_). Имена пользователей не могут быть изменены позже." aiChanMode: "ИИ режим" keepCw: "Сохраняйте Предупреждения о содержимом" +lastCommunication: "Последнее сообщение" +resolved: "Решен" +unresolved: "Неразрешенные" +itsOff: "Он выключен!" +emailRequiredForSignup: "Требуется адрес электронной почты для регистрации аккаунта" +unread: "Непрочитанное" +filter: "Фильтры" controlPanel: "Панель управления" manageAccounts: "Управление аккаунтом" -_docs: - continueReading: "Читать подробнее" - features: "Возможности" - generalTopics: "Основные темы" - advancedTopics: "Дополнительные темы" - admin: "Управление" - translateWarn: "Это перевод документа. Он может неточно отражать содержимое оригинала." +makeReactionsPublic: "Опубликовать список реакций" +makeReactionsPublicDescription: "Список сделанных вами реакций доступен для просмотра всем желающим." +classic: "Классика" +unmuteThread: "Отключить звук" +ffVisibilityDescription: "Вы можете установить объем вашей следующей/последней информации." +_emailUnavailable: + used: "Уже используется" + format: "Неправильный формат" + smtp: "Почтовый сервер не отвечает" +_ffVisibility: + public: "Опубликовать" + private: "Частный" +_signup: + almostThere: "Почти готово!" + emailAddressInfo: "Пожалуйста, введите адрес электронной почты, который вы используете." + emailSent: "На указанный вами адрес электронной почты ({email}) было отправлено письмо с подтверждением. Перейдите по ссылке в электронном письме, чтобы завершить создание учетной записи." +_accountDelete: + accountDelete: "Удалить свой аккаунт" + mayTakeTime: "Удаление учетной записи - это тяжелый процесс, который может занять много времени, если у вас создано много контента или загружено много файлов." + sendEmail: "Мы отправим уведомление на зарегистрированный вами адрес электронной почты, когда ваша учетная запись будет удалена." + requestAccountDelete: "Запросить удаление вашей учетной записи" + started: "Процесс удаления начался." + inProgress: "Удаление в процессе" _ad: back: "Выход" reduceFrequencyOfThisAd: "Реже показывать эту рекламу" @@ -893,6 +920,8 @@ _mfm: fontDescription: "Так можно писать произвольным шрифтом." rainbow: "Радуга" rainbowDescription: "Заставлять содержимое отображаться в цветах радуги." + sparkle: "Блеск" + sparkleDescription: "Добавьте эффект искрящихся частиц." _reversi: reversi: "Реверси" gameSettings: "Настройки игры" @@ -1119,6 +1148,10 @@ _permissions: "write:user-groups": "Изменять и удалять группы пользователей" "read:channels": "Смотреть каналы" "write:channels": "Изменять каналы" + "read:gallery": "Смотреть галерею" + "write:gallery": "Работа с галереей" + "read:gallery-likes": "Посмотреть галерею лайков" + "write:gallery-likes": "Манипулируйте понравившейся галереей" _auth: shareAccess: "Дать доступ для «{name}» к вашей учётной записи?" shareAccessAsk: "Уверены, что хотите дать приложению доступ к своей учётной записи?" diff --git a/locales/uk-UA.yml b/locales/uk-UA.yml index b68f99c67b..73f43669af 100644 --- a/locales/uk-UA.yml +++ b/locales/uk-UA.yml @@ -692,8 +692,6 @@ middle: "Середній" global: "Глобальна" sent: "Відправити" hashtags: "Хештеґ" -_docs: - admin: "Управління" _ad: back: "Назад" _gallery: diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index 1764c366cf..604f1e74d8 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -1,20 +1,20 @@ --- _lang_: "中文(简体)" headlineMisskey: "通过帖子连接在一起的网络" -introMisskey: "欢迎!Misskey是一个开源的、去中心化的“微博客”服务。\n通过编写「帖子」来和大家分享你的以及你周围的事情吧!📡\n通过「回应」功能,可以让你快速地对大家的帖子表达反馈👍\n来探索新的世界吧!🚀" +introMisskey: "欢迎!Misskey是一个开源的、去中心化的“微博客”服务。\n通过编写「帖文」来和大家分享你的以及你周围的事情吧!📡\n通过「回应」功能,可以让你快速地对大家的帖文表达反馈👍\n来探索新的世界吧!🚀" monthAndDay: "{month}月 {day}日" search: "搜索" notifications: "通知" username: "用户名" password: "密码" -forgotPassword: "重置密码" -fetchingAsApObject: "联合查询中" +forgotPassword: "忘记密码" +fetchingAsApObject: "联合查询" ok: "OK" gotIt: "我明白了" cancel: "取消" enterUsername: "输入用户名" -renotedBy: "{user} 转发了" -noNotes: "没有帖子" +renotedBy: "由 {user} 转推" +noNotes: "没有帖文" noNotifications: "无通知" instance: "实例" settings: "设置" @@ -124,9 +124,9 @@ unblockConfirm: "确定要解除拉黑吗?" suspendConfirm: "要冻结吗?" unsuspendConfirm: "要解除冻结吗?" selectList: "选择列表" -selectAntenna: "天线选择" +selectAntenna: "选择天线" selectWidget: "选择小工具" -editWidgets: "编辑小工具" +editWidgets: "编辑部件" editWidgetsExit: "完成编辑" customEmojis: "自定义表情符号" emoji: "表情符号" @@ -139,9 +139,9 @@ cacheRemoteFiles: "远程文件缓存" cacheRemoteFilesDescription: "当禁用此设定时远程文件将直接从远程实例载入。禁用后会减小储存空间需求,但是会增加流量,因为缩略图不会被生成。" flagAsBot: "这是一个机器人账号" flagAsBotDescription: "如果此帐户由程序控制,请启用此项。启用后,此标志可以帮助其他开发人员防止机器人之间产生无限互动的行为,并让Misskey的内部系统将此帐户识别为机器人。" -flagAsCat: "这个账户是一只猫" -flagAsCatDescription: "如果您想表明此帐户是一只猫,请打开此标志。\n开启后,会在您的头像上出现猫耳朵,并将你的帖子中的「na」替换为「nya」,日文同理。" -autoAcceptFollowed: "自动允许关注者的关注" +flagAsCat: "将这个账户设定为一只猫" +flagAsCatDescription: "如果您想表明此帐户是一只猫,请打开此标志。" +autoAcceptFollowed: "自动允许关注" addAccount: "添加账户" loginFailed: "登录失败" showOnRemote: "转到所在实例显示" @@ -620,6 +620,8 @@ reportAbuse: "举报" reportAbuseOf: "举报{name}" fillAbuseReportDescription: "请填写举报的详细原因。如果有对方发的帖子,请同时填写URL地址。" abuseReported: "内容已发送。感谢您的报告。" +reporteeOrigin: "举报来源" +reporterOrigin: "举报者来源" send: "发送" abuseMarkAsResolved: "处理完毕" openInNewTab: "在新标签页中打开" @@ -797,7 +799,25 @@ unread: "未读" filter: "筛选" controlPanel: "控制面板" manageAccounts: "管理账户" +makeReactionsPublic: "将回应设置为公开" +makeReactionsPublicDescription: "将您发表过的回应设置成公开可见。" classic: "经典" +muteThread: "屏蔽帖子列表" +unmuteThread: "取消屏蔽帖子列表" +ffVisibility: "连接的可见范围" +ffVisibilityDescription: "您可以设置您的关注/关注者信息的公开范围" +continueThread: "查看更多帖子" +deleteAccountConfirm: "将要删除账户。是否确认?" +_emailUnavailable: + used: "已经被使用过" + format: "无效的格式" + disposable: "不是永久可用的地址" + mx: "邮件服务器不正确" + smtp: "邮件服务器没有响应" +_ffVisibility: + public: "发布" + followers: "只有关注你的用户能看到" + private: "私密" _signup: almostThere: "即将完成" emailAddressInfo: "请输入您所使用的电子邮件地址" @@ -809,13 +829,6 @@ _accountDelete: requestAccountDelete: "请求删除账户" started: "账户删除过程已开始。" inProgress: "正在删除" -_docs: - continueReading: "继续阅读" - features: "特性" - generalTopics: "通常提示" - advancedTopics: "进阶提示" - admin: "管理" - translateWarn: "本文档是翻译后的文档。内容可能与原文有所不同。" _ad: back: "返回" reduceFrequencyOfThisAd: "减少此广告的频率" diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml index f362d4258b..888e12490a 100644 --- a/locales/zh-TW.yml +++ b/locales/zh-TW.yml @@ -754,8 +754,8 @@ ratio: "%" global: "公開" sent: "發送" hashtags: "#tag" -_docs: - admin: "管理" +_ffVisibility: + public: "發佈" _ad: back: "返回" reduceFrequencyOfThisAd: "降低此廣告的頻率 " diff --git a/package.json b/package.json index d712e21e2d..343e3f36cc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "12.96.1", + "version": "12.97.1", "codename": "indigo", "repository": { "type": "git", @@ -17,10 +17,8 @@ "migrate": "cd packages/backend && npx typeorm migration:run", "migrateandstart": "npm run migrate && npm run start", "gulp": "gulp build", - "watch": "concurrently \"npm:watch-*\"", - "watch-webpack": "webpack --watch", - "watch-ts": "tsc -w -p packages/tsconfig.json && tsc-alias -w -p packages/tsconfig.json", - "watch-gulp": "gulp watch", + "watch": "npm run dev", + "dev": "node ./scripts/dev.js", "lint": "node ./scripts/lint.js", "cy:open": "cypress open", "cy:run": "cypress run", @@ -46,8 +44,10 @@ "devDependencies": { "@redocly/openapi-core": "1.0.0-beta.54", "@types/fluent-ffmpeg": "2.1.17", + "@typescript-eslint/parser": "5.4.0", "cross-env": "7.0.3", "cypress": "9.0.0", - "start-server-and-test": "1.14.0" + "start-server-and-test": "1.14.0", + "typescript": "4.5.2" } } diff --git a/packages/backend/.eslintrc.js b/packages/backend/.eslintrc.js index 0978f8ab40..e2e31e9e33 100644 --- a/packages/backend/.eslintrc.js +++ b/packages/backend/.eslintrc.js @@ -1,73 +1,9 @@ module.exports = { - root: true, - parser: '@typescript-eslint/parser', parserOptions: { tsconfigRootDir: __dirname, project: ['./tsconfig.json'], }, - plugins: [ - '@typescript-eslint', - 'import' - ], extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:import/recommended', - 'plugin:import/typescript' + '../shared/.eslintrc.js', ], - rules: { - 'indent': ['warn', 'tab', { - 'SwitchCase': 1, - 'MemberExpression': 'off', - 'flatTernaryExpressions': true, - 'ArrayExpression': 'first', - 'ObjectExpression': 'first', - }], - 'eol-last': ['error', 'always'], - 'semi': ['error', 'always'], - 'quotes': ['warn', 'single'], - 'comma-dangle': ['warn', 'always-multiline'], - 'keyword-spacing': ['error', { - 'before': true, - 'after': true, - }], - 'key-spacing': ['error', { - 'beforeColon': false, - 'afterColon': true, - }], - /* TODO: path aliasを使わないとwarnする - 'no-restricted-imports': ['warn', { - 'patterns': [ - ] - }], - */ - 'no-multi-spaces': ['error'], - 'no-var': ['error'], - 'prefer-arrow-callback': ['error'], - 'no-throw-literal': ['warn'], - 'no-param-reassign': ['warn'], - 'no-constant-condition': ['warn'], - 'no-empty-pattern': ['warn'], - 'no-async-promise-executor': ['off'], - 'no-useless-escape': ['off'], - 'no-multi-spaces': ['warn'], - 'no-multiple-empty-lines': ['error', { 'max': 1 }], - 'no-control-regex': ['warn'], - 'no-empty': ['warn'], - 'no-inner-declarations': ['off'], - 'no-sparse-arrays': ['off'], - 'nonblock-statement-body-position': ['error', 'beside'], - 'object-curly-spacing': ['error', 'always'], - 'space-infix-ops': ['error'], - 'space-before-blocks': ['error', 'always'], - '@typescript-eslint/no-var-requires': ['warn'], - '@typescript-eslint/no-inferrable-types': ['warn'], - '@typescript-eslint/no-empty-function': ['off'], - '@typescript-eslint/no-non-null-assertion': ['off'], - '@typescript-eslint/no-misused-promises': ['error', { - 'checksVoidReturn': false, - }], - 'import/no-unresolved': ['off'], - 'import/no-default-export': ['warn'], - }, }; diff --git a/packages/backend/.vscode/settings.json b/packages/backend/.vscode/settings.json new file mode 100644 index 0000000000..df3bf05071 --- /dev/null +++ b/packages/backend/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "typescript.tsdk": "node_modules\\typescript\\lib", + "path-intellisense.mappings": { + "@": "${workspaceRoot}/packages/backend/src/" + } +} diff --git a/packages/backend/package.json b/packages/backend/package.json index 6c41245e66..d7738e75a8 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -4,7 +4,7 @@ "scripts": { "init": "npm run migrate", "build": "tsc -p tsconfig.json || echo done. && tsc-alias -p tsconfig.json", - "watch": "tsc -w -p tsconfig.json && tsc-alias -w -p tsconfig.json", + "watch": "node watch.mjs", "lint": "eslint --quiet src/**/*.ts", "mocha": "cross-env TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT=\"./test/tsconfig.json\" mocha", "test": "npm run mocha" @@ -179,7 +179,7 @@ "tmp": "0.2.1", "ts-loader": "9.2.6", "ts-node": "10.4.0", - "tsc-alias": "1.3.10", + "tsc-alias": "1.4.1", "tsconfig-paths": "3.11.0", "twemoji-parser": "13.1.0", "typeorm": "0.2.39", @@ -194,6 +194,7 @@ "devDependencies": { "@redocly/openapi-core": "1.0.0-beta.54", "@types/fluent-ffmpeg": "2.1.17", - "cross-env": "7.0.3" + "cross-env": "7.0.3", + "execa": "6.0.0" } } diff --git a/packages/backend/watch.mjs b/packages/backend/watch.mjs new file mode 100644 index 0000000000..9c9d2dbd86 --- /dev/null +++ b/packages/backend/watch.mjs @@ -0,0 +1,23 @@ +import { execa } from 'execa'; + +(async () => { + // なぜかchokidarが動かない影響で、watchされない + /* + execa('tsc-alias', ['-w', '-p', 'tsconfig.json'], { + stdout: process.stdout, + stderr: process.stderr, + }); + */ + + setInterval(() => { + execa('tsc-alias', ['-p', 'tsconfig.json'], { + stdout: process.stdout, + stderr: process.stderr, + }); + }, 3000); + + execa('tsc', ['-w', '-p', 'tsconfig.json'], { + stdout: process.stdout, + stderr: process.stderr, + }); +})(); diff --git a/packages/backend/yarn.lock b/packages/backend/yarn.lock index aa8794f7b7..defe9b8922 100644 --- a/packages/backend/yarn.lock +++ b/packages/backend/yarn.lock @@ -111,22 +111,6 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== -"@jfonx/console-utils@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@jfonx/console-utils/-/console-utils-1.0.3.tgz#cbb7f911e4191a4a2fe1ba4807d29f100b5d099f" - integrity sha512-/XbnqjWc7yNZVLAJJO9rimfIz9DYte+cj3EF9hwhIv7vw6ok2t3cjl0huYsmD89srKH03vWjeqAcIH86CuYj3g== - dependencies: - colors "^1.3.3" - -"@jfonx/file-utils@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@jfonx/file-utils/-/file-utils-3.0.1.tgz#8d3d6e931a283420fe29802ea71c28dd397cd8d3" - integrity sha512-qwH0CuzWmghtTHGMyuPHj6SJPQgWeiXFJBfrxCWMbzxVCa3aLZPEfzSdlSnC/UABsk6feRkNdHXw59rVshNPqw== - dependencies: - "@jfonx/console-utils" "^1.0.3" - comment-json "^4.1.0" - find-up "^4.1.0" - "@koa/cors@3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@koa/cors/-/cors-3.1.0.tgz#618bb073438cfdbd3ebd0e648a76e33b84f3a3b2" @@ -1380,11 +1364,6 @@ array-includes@^3.1.4: get-intrinsic "^1.1.1" is-string "^1.0.7" -array-timsort@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-timsort/-/array-timsort-1.0.3.tgz#3c9e4199e54fb2b9c3fe5976396a21614ef0d926" - integrity sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ== - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -2007,7 +1986,7 @@ cheerio@^0.22.0: lodash.reject "^4.4.0" lodash.some "^4.4.0" -chokidar@3.5.1, chokidar@^3.3.1, chokidar@^3.5.0: +chokidar@3.5.1, chokidar@^3.3.1, chokidar@^3.5.2: version "3.3.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== @@ -2166,7 +2145,7 @@ colorette@^1.2.0, colorette@^1.2.1, colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== -colors@^1.1.2, colors@^1.3.3, colors@^1.4.0: +colors@^1.1.2, colors@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== @@ -2183,26 +2162,15 @@ commander@^2.19.0, commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -comment-json@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-4.1.1.tgz#49df4948704bebb1cc0ffa6910e25669b668b7c5" - integrity sha512-v8gmtPvxhBlhdRBLwdHSjGy9BgA23t9H1FctdQKyUrErPjSrJcdDMqBq9B4Irtm7w3TNYLQJNH6ARKnpyag1sA== - dependencies: - array-timsort "^1.0.3" - core-util-is "^1.0.2" - esprima "^4.0.1" - has-own-prop "^2.0.0" - repeat-string "^1.6.1" +commander@^8.2.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== compare-versions@3.6.0: version "3.6.0" @@ -2305,11 +2273,6 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -core-util-is@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - crc-32@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" @@ -2338,7 +2301,7 @@ cross-env@7.0.3: dependencies: cross-spawn "^7.0.1" -cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2: +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -3295,6 +3258,21 @@ events@^3.2.0: resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== +execa@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-6.0.0.tgz#598b46f09ae44f5d8097a30cfb1681d0f0371503" + integrity sha512-m4wU9j4Z9nXXoqT8RSfl28JSwmMNLFF69OON8H/lL3NeU0tNpGz313bcOfYoBBHokB0dC2tMl3VUcKgHELhL2Q== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^3.0.1" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.0.1" + onetime "^6.0.0" + signal-exit "^3.0.5" + strip-final-newline "^3.0.0" + execa@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" @@ -3435,7 +3413,7 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -find-node-modules@^2.1.0: +find-node-modules@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.1.2.tgz#57565a3455baf671b835bc6b2134a9b938b9c53c" integrity sha512-x+3P4mbtRPlSiVE1Qco0Z4YLU8WFiFcuWTf3m75OV9Uzcfs2Bg+O9N+r/K0AnmINBW06KpfqKwYJbFlFq4qNug== @@ -3465,14 +3443,6 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - findup-sync@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" @@ -3637,6 +3607,11 @@ get-stream@^5.0.0, get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -3734,7 +3709,7 @@ globals@^13.9.0: dependencies: type-fest "^0.20.2" -globby@^11.0.2, globby@^11.0.4: +globby@^11.0.4: version "11.0.4" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== @@ -3816,11 +3791,6 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-own-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-own-prop/-/has-own-prop-2.0.0.tgz#f0f95d58f65804f5d218db32563bb85b8e0417af" - integrity sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ== - has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" @@ -4007,6 +3977,11 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" + integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -4425,6 +4400,11 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -5008,13 +4988,6 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -5266,6 +5239,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + mimic-response@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -5467,6 +5445,11 @@ multer@1.4.3: type-is "^1.6.4" xtend "^4.0.0" +mylas@^2.1.4: + version "2.1.5" + resolved "https://registry.yarnpkg.com/mylas/-/mylas-2.1.5.tgz#7ccf41ec5a93ab2d63fc3678abf1942c0e7bdeb1" + integrity sha512-7ZyrJux1lipSR45IxDvWz7zJOXWTazTFCqD4/p8XBF4O+mtJwf7QpMWTH+jE4lV9O2I38xcpS0KTIp7GwhUTmA== + mz@^2.4.0, mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -5657,6 +5640,13 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" +npm-run-path@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.0.1.tgz#748dd68ed7de377bb1f7132c7dafe657be5ab400" + integrity sha512-ybBJQUSyFwEEhqO2lXmyKOl9ucHtyZBWVM0h0FiMfT/+WKxCUZFa95qAR2X3w/w6oigN3B0b2UNHZbD+kdfD5w== + dependencies: + path-key "^4.0.0" + npmlog@^4.0.1, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -5784,6 +5774,13 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + only@~0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" @@ -5877,7 +5874,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -5912,13 +5909,6 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -6024,6 +6014,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -6907,11 +6902,6 @@ rename@1.0.4: dependencies: debug "^2.5.2" -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - request-promise-core@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" @@ -7252,6 +7242,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +signal-exit@^3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" + integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== + simple-concat@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" @@ -7572,6 +7567,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -7915,17 +7915,16 @@ ts-node@10.4.0: make-error "^1.1.1" yn "3.1.1" -tsc-alias@1.3.10: - version "1.3.10" - resolved "https://registry.yarnpkg.com/tsc-alias/-/tsc-alias-1.3.10.tgz#6ccf81c644092387ab9be3a3a75549a95eeffd80" - integrity sha512-7SF56qiV7Oh/bON+XjF/uAzEFqbmwCuEIHQyoTyVJAK80WnxaIyhO9TBwD/x8InIMU8lnvExQBOrgKkRPsHH+w== +tsc-alias@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/tsc-alias/-/tsc-alias-1.4.1.tgz#6a6075dd94267d9befdad1431f410bd0b8819805" + integrity sha512-nHTR8qvM/LiYI8Fx6UrzAQXRngAuE2PEK+n9uXmQY6fN+oLZhweNFkCLbyxKDmlLfYnclSuaR+dSuvRd7FUu8Q== dependencies: - "@jfonx/console-utils" "^1.0.3" - "@jfonx/file-utils" "^3.0.1" - chokidar "^3.5.0" - commander "^6.2.1" - find-node-modules "^2.1.0" - globby "^11.0.2" + chokidar "^3.5.2" + commander "^8.2.0" + find-node-modules "^2.1.2" + globby "^11.0.4" + mylas "^2.1.4" normalize-path "^3.0.0" tsconfig-paths@3.11.0, tsconfig-paths@^3.11.0: diff --git a/packages/client/.eslintrc b/packages/client/.eslintrc deleted file mode 100644 index b3b631e1de..0000000000 --- a/packages/client/.eslintrc +++ /dev/null @@ -1,32 +0,0 @@ -{ - "env": { - "node": false - }, - "extends": [ - "eslint:recommended", - "plugin:vue/recommended" - ], - "rules": { - "vue/require-v-for-key": 0, - "vue/max-attributes-per-line": 0, - "vue/html-indent": 0, - "vue/html-self-closing": 0, - "vue/no-unused-vars": 0, - "vue/attributes-order": 0, - "vue/require-prop-types": 0, - "vue/require-default-prop": 0, - "vue/html-closing-bracket-spacing": 0, - "vue/singleline-html-element-content-newline": 0, - "vue/no-v-html": 0 - }, - "globals": { - "_DEV_": false, - "_LANGS_": false, - "_VERSION_": false, - "_ENV_": false, - "_PERF_PREFIX_": false, - "_DATA_TRANSFER_DRIVE_FILE_": false, - "_DATA_TRANSFER_DRIVE_FOLDER_": false, - "_DATA_TRANSFER_DECK_COLUMN_": false - } -} diff --git a/packages/client/.eslintrc.js b/packages/client/.eslintrc.js new file mode 100644 index 0000000000..8e4ff6e455 --- /dev/null +++ b/packages/client/.eslintrc.js @@ -0,0 +1,61 @@ +module.exports = { + root: true, + env: { + "node": false + }, + parser: "vue-eslint-parser", + parserOptions: { + "parser": "@typescript-eslint/parser", + tsconfigRootDir: __dirname, + //project: ['./tsconfig.json'], + }, + extends: [ + //"../shared/.eslintrc.js", + "plugin:vue/vue3-recommended" + ], + rules: { + "vue/attributes-order": ["error", { + "alphabetical": false + }], + "vue/no-use-v-if-with-v-for": ["error", { + "allowUsingIterationVar": false + }], + "vue/no-ref-as-operand": "error", + "vue/no-multi-spaces": ["error", { + "ignoreProperties": false + }], + "vue/no-v-html": "error", + "vue/order-in-components": "error", + "vue/html-indent": ["warn", "tab", { + "attribute": 1, + "baseIndent": 0, + "closeBracket": 0, + "alignAttributesVertically": true, + "ignores": [] + }], + "vue/html-closing-bracket-spacing": ["warn", { + "startTag": "never", + "endTag": "never", + "selfClosingTag": "never" + }], + "vue/multi-word-component-names": "warn", + "vue/require-v-for-key": "warn", + "vue/no-unused-components": "warn", + "vue/valid-v-for": "warn", + "vue/return-in-computed-property": "warn", + "vue/max-attributes-per-line": "off", + "vue/html-self-closing": "off", + "vue/singleline-html-element-content-newline": "off", + }, + globals: { + "require": false, + "_DEV_": false, + "_LANGS_": false, + "_VERSION_": false, + "_ENV_": false, + "_PERF_PREFIX_": false, + "_DATA_TRANSFER_DRIVE_FILE_": false, + "_DATA_TRANSFER_DRIVE_FOLDER_": false, + "_DATA_TRANSFER_DECK_COLUMN_": false + } +} diff --git a/packages/client/.vscode/settings.json b/packages/client/.vscode/settings.json new file mode 100644 index 0000000000..4b0903b763 --- /dev/null +++ b/packages/client/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "typescript.tsdk": "node_modules\\typescript\\lib", + "path-intellisense.mappings": { + "@": "${workspaceRoot}/packages/client/src/" + }, + "eslint.validate": [ + "javascript", + "javascriptreact", + "vue" + ] +} diff --git a/packages/client/package.json b/packages/client/package.json index 57cc519534..911dadceee 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -2,7 +2,8 @@ "private": true, "scripts": { "watch": "webpack --watch", - "build": "webpack" + "build": "webpack", + "lint": "eslint --quiet src/**/*.{ts,vue}" }, "resolutions": { "chokidar": "^3.3.1", @@ -72,7 +73,7 @@ "dateformat": "4.5.1", "escape-regexp": "0.0.1", "eslint": "8.2.0", - "eslint-plugin-vue": "8.0.3", + "eslint-plugin-vue": "8.1.1", "eventemitter3": "4.0.7", "feed": "4.2.2", "glob": "7.2.0", @@ -152,8 +153,10 @@ "devDependencies": { "@redocly/openapi-core": "1.0.0-beta.54", "@types/fluent-ffmpeg": "2.1.17", + "@typescript-eslint/eslint-plugin": "5.4.0", "cross-env": "7.0.3", "cypress": "8.5.0", + "eslint-plugin-import": "2.25.3", "start-server-and-test": "1.14.0" } } diff --git a/packages/client/src/components/abuse-report-window.vue b/packages/client/src/components/abuse-report-window.vue index 700ce30bb2..6b07639f6d 100644 --- a/packages/client/src/components/abuse-report-window.vue +++ b/packages/client/src/components/abuse-report-window.vue @@ -16,7 +16,7 @@