Merge branch 'master' into chapters

This commit is contained in:
Ajay Ramachandran 2022-03-12 16:56:53 -05:00 committed by GitHub
commit 9477ad425c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 1388 additions and 537 deletions

View file

@ -1 +1 @@
["yewtu.be","invidious.snopyta.org","vid.puffyan.us","invidious.kavin.rocks","invidio.xamh.de","inv.riverside.rocks","invidious.osi.kr","inv.cthd.icu","yt.artemislena.eu","youtube.076.ne.jp","invidious.namazso.eu"] ["yewtu.be","invidious.snopyta.org","vid.puffyan.us","invidious.kavin.rocks","invidio.xamh.de","inv.riverside.rocks","invidious-us.kavin.rocks","invidious.osi.kr","tube.cthd.icu","yt.artemislena.eu","youtube.076.ne.jp","invidious.namazso.eu"]

View file

@ -1,7 +1,7 @@
{ {
"name": "__MSG_fullName__", "name": "__MSG_fullName__",
"short_name": "SponsorBlock", "short_name": "SponsorBlock",
"version": "4.1.4", "version": "4.1.6",
"default_locale": "en", "default_locale": "en",
"description": "__MSG_Description__", "description": "__MSG_Description__",
"homepage_url": "https://sponsor.ajay.app", "homepage_url": "https://sponsor.ajay.app",

View file

@ -52,6 +52,9 @@
"reskip": { "reskip": {
"message": "اعاده التخطي" "message": "اعاده التخطي"
}, },
"unmute": {
"message": "إلغاء الكتم"
},
"paused": { "paused": {
"message": "ايقاف مؤقت" "message": "ايقاف مؤقت"
}, },
@ -88,9 +91,281 @@
"refreshSegments": { "refreshSegments": {
"message": "تحديث الأجزاء" "message": "تحديث الأجزاء"
}, },
"success": {
"message": "تم بنجاح!"
},
"voted": {
"message": "تم التصويت!"
},
"serverDown": {
"message": "يبدو أن الخادم غير متصل. تواصل مع المطوّر على الفور."
},
"connectionError": {
"message": "حدث خطأ في الاتصال. رمز الخطأ: "
},
"clearTimes": {
"message": "مسح الأجزاء"
},
"openPopup": {
"message": "فتح نافذة سبونسر بلوك المنبثقة"
},
"closePopup": {
"message": "إغلاق النافذة المنبثقة"
},
"SubmitTimes": {
"message": "إرسال الأجزاء"
},
"submitCheck": {
"message": "هل أنت متيقّن من إرسال هذا؟"
},
"whitelistChannel": {
"message": "إضافة القناة إلى القائمة البيضاء"
},
"removeFromWhitelist": {
"message": "إزالة القناة من القائمة البيضاء"
},
"voteOnTime": {
"message": "صوّت لجزء"
},
"Submissions": {
"message": "المشاركات"
},
"savedPeopleFrom": {
"message": "لقد وفّرت على الناس "
},
"viewLeaderboard": {
"message": "لوحة الصدارة"
},
"recordTimesDescription": {
"message": "إرسال"
},
"submissionEditHint": {
"message": "سيظهر تحرير القسم بعد النقر على إرسال",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"popupHint": {
"message": "تلميح: يمكنك إعداد اختصارات مفاتيح للتقديم في الخيارات"
},
"clearTimesButton": {
"message": "مسح الأوقات"
},
"submitTimesButton": {
"message": "إرسال الأوقات"
},
"publicStats": {
"message": "يستخدم هذا في صفحة الإحصائيات العامة لإظهار مقدار مساهمتك. قم برؤيتها"
},
"Username": { "Username": {
"message": "اسم المستخدم" "message": "اسم المستخدم"
}, },
"setUsername": {
"message": "تعيين اسم مستخدم"
},
"copyPublicID": {
"message": "نسخ معرف المستخدم العام"
},
"discordAdvert": {
"message": "انضم إلى سيرفر \"ديسكورد\" الرسمي لتقديم اقتراحات وتعليقات!"
},
"hideThis": {
"message": "إخفاء هذا"
},
"Options": {
"message": "خيارات"
},
"showButtons": {
"message": "إظهار الأزرار على مشغل اليوتيوب"
},
"hideButtons": {
"message": "إخفاء الأزرار على مشغل اليوتيوب"
},
"hideButtonsDescription": {
"message": "هذا يخفي الأزرار التي تظهر على مشغل اليوتيوب لإرسال أجزاء للتخطي."
},
"showSkipButton": {
"message": "إبقاء زر \"تخطي للعنوان الرئيس\" على المشغّل"
},
"showInfoButton": {
"message": "إظهار زر \"معلومات\" على مشغّل اليوتيوب"
},
"hideInfoButton": {
"message": "إخفاء زر \"معلومات\" على مشغّل اليوتيوب"
},
"autoHideInfoButton": {
"message": "إخفاء تلقائي لزر \"معلومات\""
},
"hideDeleteButton": {
"message": "إخفاء زر \"حذف\" على مشغّل اليوتيوب"
},
"showDeleteButton": {
"message": "إظهار زر \"حذف\" على مشغّل اليوتيوب"
},
"showNotice": {
"message": "إظهار الإشعار مرة أخرى"
},
"website": {
"message": "موقع الويب",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "الشفرة المصدرية",
"description": "Used on Firefox Store Page"
},
"setSkipShortcut": {
"message": "تخطي الجزء",
"description": "Keybind label"
},
"setStartSponsorShortcut": {
"message": "بدء/إيقاف الجزء",
"description": "Keybind label"
},
"setSubmitKeybind": {
"message": "إرسال الأجزاء",
"description": "Keybind label"
},
"errorCode": {
"message": "رمز الخطأ: "
},
"skip": {
"message": "تخطي"
},
"mute": {
"message": "كتم"
},
"full": {
"message": "فيديو كامل",
"description": "Used for the name of the option to label an entire video as sponsor or self promotion."
},
"skip_category": {
"message": "تخطي {0}؟"
},
"mute_category": {
"message": "كتم {0}؟"
},
"skip_to_category": {
"message": "تخطي إلى {0}؟",
"description": "Used for skipping to things (Skip to Highlight)"
},
"skipped": {
"message": "تم تخطي {0}",
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "تم كتم {0}",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
"message": "تم التخطي إلى {0}",
"description": "Used for skipping to things (Skipped to Highlight)"
},
"disableAutoSkip": {
"message": "تعطيل التخطي التلقائي"
},
"enableAutoSkip": {
"message": "تفعيل التخطي التلقائي"
},
"minLower": {
"message": "دقيقة"
},
"minsLower": {
"message": "دقائق"
},
"hourLower": {
"message": "ساعة"
},
"hoursLower": {
"message": "ساعات"
},
"youHaveSavedTime": {
"message": "لقد وفّرت على الناس",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"youHaveSavedTimeEnd": {
"message": " من حياتهم",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"createdBy": {
"message": "أنشئت من قِبل"
},
"supportOtherSites": {
"message": "دعم مواقع يوتيوب الطرف الثالث"
},
"supportedSites": {
"message": "المواقع المدعومة: "
},
"add": {
"message": "أضِف"
},
"save": {
"message": "حفظ"
},
"reset": {
"message": "إعادة تعيين"
},
"exportOptionsCopy": {
"message": "تعديل/نسخ"
},
"exportOptionsDownload": {
"message": "حفظ إلى ملف"
},
"exportOptionsUpload": {
"message": "تحميل من ملف"
},
"submit": {
"message": "إرسال"
},
"cancel": {
"message": "إلغاء"
},
"delete": {
"message": "حذف"
},
"preview": {
"message": "معاينة"
},
"unsubmitted": {
"message": "غير مرسلة"
},
"inspect": {
"message": "فحص"
},
"edit": {
"message": "تعديل"
},
"to": {
"message": "إلى",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"category_sponsor": {
"message": "الراعي"
},
"category_exclusive_access": {
"message": "وصول حصري"
},
"category_outro": {
"message": "الخاتمة/تترات النهاية"
},
"category_preview": {
"message": "معاينة/خلاصة"
},
"category_filler_short": {
"message": "حشو"
},
"category_music_offtopic": {
"message": "الموسيقى: مقطع غير موسيقي"
},
"category": {
"message": "الفئة"
},
"bracketNow": {
"message": "(الآن)"
},
"moreCategories": {
"message": "المزيد من الفئات"
},
"chooseACategory": {
"message": "اختر فئة"
},
"permissionRequestSuccess": { "permissionRequestSuccess": {
"message": "نجح طلب الإذن!" "message": "نجح طلب الإذن!"
}, },
@ -103,6 +378,9 @@
"incorrectCategory": { "incorrectCategory": {
"message": "تغيير الفئة" "message": "تغيير الفئة"
}, },
"multipleSegments": {
"message": "أجزاء متعددة"
},
"guidelines": { "guidelines": {
"message": "الإرشادات" "message": "الإرشادات"
}, },

View file

@ -3,7 +3,213 @@
"message": "ইউটিউবের জন্য স্পনসরব্লক - স্পনসরশিপ এড়িয়ে যান", "message": "ইউটিউবের জন্য স্পনসরব্লক - স্পনসরশিপ এড়িয়ে যান",
"description": "Name of the extension." "description": "Name of the extension."
}, },
"Description": {
"message": "YouTube ভিডিওতে স্পনসরশিপ, সাবস্ক্রিপশন ভিক্ষা এবং আরও অনেক কিছু এড়িয়ে যান। অন্যদের সময় বাঁচাতে আপনার দেখা ভিডিওগুলিতে স্পনসরদের রিপোর্ট করুন।",
"description": "Description of the extension."
},
"400": {
"message": "সার্ভার বলেছে এই অনুরোধটি অবৈধ"
},
"429": {
"message": "আপনি এই একটি ভিডিওর জন্য অনেক বেশি স্পনসর জমা দিয়েছেন, আপনি কি নিশ্চিত যে এই একটি ভিডিওর জন্য অনেকগুলি স্পনসর আছে?"
},
"409": { "409": {
"message": "এটি আগেই জমা দেওয়া হয়েছে" "message": "এটি আগেই জমা দেওয়া হয়েছে"
},
"channelWhitelisted": {
"message": "চ্যানেল সাদা তালিকাভুক্ত!"
},
"Segment": {
"message": "অংশ"
},
"Segments": {
"message": "অংশগুলো"
},
"upvoteButtonInfo": {
"message": "এই জমাটিকে সমর্থন করুন"
},
"reportButtonTitle": {
"message": "রিপোর্ট"
},
"reportButtonInfo": {
"message": "এই জমাটি ভুল হিসাবে রিপোর্ট করুন।"
},
"Dismiss": {
"message": "খারিজ করুন"
},
"Loading": {
"message": "লোড করা হচ্ছে..."
},
"Hide": {
"message": "কখনো দেখাবে না"
},
"hitGoBack": {
"message": "আপনি যেখান থেকে এসেছেন সেখানে যেতে আনস্কিপ টিপুন"
},
"unskip": {
"message": "বাদ দিন"
},
"reskip": {
"message": "বাদ দিন"
},
"unmute": {
"message": "সরব করুন"
},
"paused": {
"message": "বিরতি"
},
"manualPaused": {
"message": "টাইমার থেমেছে"
},
"confirmMSG": {
"message": "পৃথক মান সম্পাদনা করতে বা মুছতে, তথ্য বোতামে ক্লিক করুন বা উপরের ডানদিকের কোণায় এক্সটেনশন আইকনে ক্লিক করে এক্সটেনশন পপআপ খুলুন।"
},
"clearThis": {
"message": "আপনি কি পরিষ্কার করতে চান?"
},
"Unknown": {
"message": "আপনার স্পনসর জমা দেওয়ার সময় একটি ত্রুটি হয়েছে, অনুগ্রহ করে পরে আবার চেষ্টা করুন৷"
},
"sponsorFound": {
"message": "এই ভিডিওটি ডাটাবেসে সেগমেন্ট আছে!"
},
"sponsor404": {
"message": "কোনো সেগমেন্ট পাওয়া যায়নি"
},
"sponsorStart": {
"message": "অংশ এখন শুরু হয়"
},
"sponsorEnd": {
"message": "অংশ এখন শেষ হয়"
},
"sponsorCancel": {
"message": "সেগমেন্ট তৈরি করা বাতিল করুন"
},
"noVideoID": {
"message": "কোনো ইউটিউব ভিডিও পাওয়া যায়নি।\nযদি এটি ভুল হয়, ট্যাব রিফ্রেশ করুন।"
},
"refreshSegments": {
"message": "সেগমেন্ট রিফ্রেশ করুন"
},
"success": {
"message": "সফল!"
},
"voted": {
"message": "ভোট দিয়েছেন!"
},
"serverDown": {
"message": "মনে হচ্ছে সার্ভার ডাউন। অবিলম্বে বিকাশকারীর সাথে যোগাযোগ করুন।"
},
"connectionError": {
"message": "একটি সংযোগ ত্রুটি ঘটেছে. ভুল সংকেত: "
},
"clearTimes": {
"message": "বিভাগগুলি পরিষ্কার করুন"
},
"openPopup": {
"message": "স্পনসরব্লক পপআপ খুলুন"
},
"closePopup": {
"message": "পপআপ বন্ধ করুন"
},
"SubmitTimes": {
"message": "সেগমেন্ট জমা দিন"
},
"submitCheck": {
"message": "আপনি কি এটি জমা দেওয়ার বিষয়ে নিশ্চিত?"
},
"whitelistChannel": {
"message": "সাদা তালিকার চ্যানেল"
},
"removeFromWhitelist": {
"message": "সাদা তালিকা থেকে চ্যানেল সরান"
},
"voteOnTime": {
"message": "একটি বিভাগে ভোট দিন"
},
"Submissions": {
"message": "জমা"
},
"savedPeopleFrom": {
"message": "আপনি মানুষকে রক্ষা করেছেন "
},
"viewLeaderboard": {
"message": "শীর্ষতালিকা"
},
"recordTimesDescription": {
"message": "সাবমিট"
},
"submissionEditHint": {
"message": "আপনি জমা ক্লিক করার পরে বিভাগ সম্পাদনা প্রদর্শিত হবে",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"popupHint": {
"message": "ইঙ্গিত: আপনি বিকল্পগুলিতে জমা দেওয়ার জন্য কীবাইন্ড সেটআপ করতে পারেন"
},
"clearTimesButton": {
"message": "সময় মুছুন"
},
"submitTimesButton": {
"message": "সময় জমা দিন"
},
"publicStats": {
"message": "আপনি কতটা অবদান রেখেছেন তা দেখানোর জন্য এটি সর্বজনীন পরিসংখ্যান পৃষ্ঠায় ব্যবহার করা হয়। এটা দেখ"
},
"Username": {
"message": "ব্যবহারকারীর নাম"
},
"setUsername": {
"message": "ব্যবহারকারীর নাম দিন"
},
"copyPublicID": {
"message": "পাবলিক ইউজারআইডি কপি করুন"
},
"discordAdvert": {
"message": "পরামর্শ এবং প্রতিক্রিয়া জানাতে অফিসিয়াল ডিসকর্ড সার্ভারে যোগ দিন!"
},
"hideThis": {
"message": "এই বিষয়বস্তু লুকান"
},
"Options": {
"message": "বিকল্পসমূহ"
},
"showButtons": {
"message": "ইউটিউব প্লেয়ারে বোতাম দেখান"
},
"hideButtons": {
"message": "ইউটিউব প্লেয়ারে বোতাম বাদ দিন"
},
"hideButtonsDescription": {
"message": "এটি স্কিপ সেগমেন্ট জমা দেওয়ার জন্য ইউটিউব প্লেয়ারে প্রদর্শিত বোতামগুলিকে লুকিয়ে রাখে।"
},
"showSkipButton": {
"message": "প্লেয়ারে বোতাম হাইলাইট করতে এড়িয়ে যান"
},
"showInfoButton": {
"message": "ইউটিউব প্লেয়ারে তথ্য বোতাম দেখান"
},
"hideInfoButton": {
"message": "ইউটিউব প্লেয়ারে তথ্য বোতাম লুকান"
},
"autoHideInfoButton": {
"message": "অটো-লুকান তথ্য বোতাম"
},
"hideDeleteButton": {
"message": "ইউটিউব প্লেয়ারে ডিলিট বোতাম লুকান"
},
"showDeleteButton": {
"message": "ইউটিউব প্লেয়ারে ডিলিট বোতাম দেখান"
},
"enableViewTracking": {
"message": "স্কিপ কাউন্ট ট্র্যাকিং সক্ষম করুন"
},
"whatViewTracking": {
"message": "এই বৈশিষ্ট্যটি ট্র্যাক করে যে আপনি কোন বিভাগগুলি এড়িয়ে গেছেন ব্যবহারকারীদের জানাতে যে তাদের জমা দেওয়া অন্যদের কতটা সাহায্য করেছে এবং স্প্যাম ডাটাবেসে প্রবেশ না করে তা নিশ্চিত করার জন্য আপভোট সহ একটি মেট্রিক হিসাবে ব্যবহার করা হয়েছে৷ আপনি যখনই একটি সেগমেন্ট এড়িয়ে যান তখন এক্সটেনশনটি সার্ভারে একটি বার্তা পাঠায়। আশা করি অধিকাংশ মানুষ এই সেটিং পরিবর্তন করবেন না যাতে ভিউ সংখ্যা সঠিক হয়। :)"
},
"enableViewTrackingInPrivate": {
"message": "ব্যক্তিগত/ছদ্মবেশী ট্যাবে গণনা ট্র্যাকিং এড়িয়ে যাওয়া সক্ষম করুন৷"
},
"enableTrackDownvotes": {
"message": "স্টোর সেগমেন্ট ডাউনভোট"
} }
} }

View file

@ -42,5 +42,185 @@
}, },
"Hide": { "Hide": {
"message": "No mostris mai" "message": "No mostris mai"
},
"hitGoBack": {
"message": "Premeu \"no saltar\" per tornar on estàveu."
},
"unskip": {
"message": "No saltar"
},
"reskip": {
"message": "Saltar de nou"
},
"unmute": {
"message": "Deixa de silenciar"
},
"paused": {
"message": "Pausat"
},
"manualPaused": {
"message": "S'ha aturat el temporitzador"
},
"confirmMSG": {
"message": "Per editar o esborrar valors individuals, premeu el botó d'informació o cliqueu la pestanya de l'extensió al cantó superior dret."
},
"clearThis": {
"message": "Segur que voleu esborrar això?\n\n"
},
"Unknown": {
"message": "S'ha produït un error en enviar els temps d'anunciant, torneu-ho a provar més endavant."
},
"sponsorFound": {
"message": "Aquest vídeo té segments a la base de dades!"
},
"sponsor404": {
"message": "No s'han trobat segments"
},
"sponsorStart": {
"message": "El segment comença ara"
},
"sponsorEnd": {
"message": "El segment acaba ara"
},
"sponsorCancel": {
"message": "Cancel·la la creació del segment"
},
"noVideoID": {
"message": "No s'ha trobat cap vídeo de YouTube.\nSi penseu que és incorrecte, refresqueu la pestanya."
},
"refreshSegments": {
"message": "Refresca els segments"
},
"success": {
"message": "Èxit!"
},
"voted": {
"message": "Votat!"
},
"serverDown": {
"message": "Sembla que ha caigut el servidor. Contacteu el desenvolupador immediatament."
},
"connectionError": {
"message": "S'ha produït un error de connexió. Codi d'error: "
},
"clearTimes": {
"message": "Esborra els segments"
},
"openPopup": {
"message": "Obrir finestra de SponsorBlock"
},
"closePopup": {
"message": "Tanca la finestra"
},
"SubmitTimes": {
"message": "Envia els segments"
},
"submitCheck": {
"message": "Segur que voleu enviar això?"
},
"whitelistChannel": {
"message": "Canal de llista blanca"
},
"removeFromWhitelist": {
"message": "Treure canal de la llista blanca"
},
"voteOnTime": {
"message": "Vota un segment"
},
"Submissions": {
"message": "Propostes"
},
"savedPeopleFrom": {
"message": "Heu estalviat la gent "
},
"viewLeaderboard": {
"message": "Classificació"
},
"recordTimesDescription": {
"message": "Envia"
},
"submissionEditHint": {
"message": "L'edició de seccions apareixerà després de prémer \"envia\"",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"popupHint": {
"message": "Consell: Podeu crear tecles de drecera per enviar en \"opcions\""
},
"clearTimesButton": {
"message": "Esborra temps"
},
"submitTimesButton": {
"message": "Envia temps"
},
"publicStats": {
"message": "Això s'utilitza a la pàgina d'estadístiques pública per fatxendejar de quant heu contribuït. Vegeu"
},
"Username": {
"message": "Nom d'usuari"
},
"setUsername": {
"message": "Definiu el nom d'usuari"
},
"copyPublicID": {
"message": "Copia l'identificador públic d'usuari"
},
"discordAdvert": {
"message": "Uniu-vos al servidor de Discord oficial per opinar i fer suggeriments!"
},
"hideThis": {
"message": "Amaga això"
},
"Options": {
"message": "Opcions"
},
"showButtons": {
"message": "Mostra els botons al reproductor de YouTube"
},
"hideButtons": {
"message": "Amaga els botons al reproductor de YouTube"
},
"hideButtonsDescription": {
"message": "Això amaga els botons que apareixen al reproductor de YouTube per enviar segments."
},
"showSkipButton": {
"message": "Mantenir \"Botar al destacat\" al reproductor"
},
"showInfoButton": {
"message": "Mostra el botó d'informació al reproductor de YouTube"
},
"hideInfoButton": {
"message": "Amaga el botó d'informació al reproductor de YouTube"
},
"autoHideInfoButton": {
"message": "Amaga automàticament el botó d'informació"
},
"minLower": {
"message": "minut"
},
"minsLower": {
"message": "minuts"
},
"hourLower": {
"message": "hora"
},
"hoursLower": {
"message": "hores"
},
"youHaveSavedTime": {
"message": "Heu estalviat la gent",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"youHaveSavedTimeEnd": {
"message": " de les seves vides",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"statusReminder": {
"message": "Visiteu status.sponsor.ajay.app per conèixer l'estat del servidor."
},
"changeUserID": {
"message": "Importa/exporta la vostra identificació d'usuari"
},
"whatChangeUserID": {
"message": "Això hauria de romandre privat: és semblant a una contrasenya i no s'hauria de compartir amb cap persona. Si algú hi té accés, poden suplantar-vos. Si esteu cercant el vostre identificador d'usuari públic, premeu la icona del portanotes a la finestra."
} }
} }

View file

@ -183,7 +183,7 @@
"message": "Versteckt die Schaltflächen im YouTube-Videoplayer, um Segmente einzusenden." "message": "Versteckt die Schaltflächen im YouTube-Videoplayer, um Segmente einzusenden."
}, },
"showSkipButton": { "showSkipButton": {
"message": "\"Zum Highlight springen\"-Button im Player behalten" "message": "\"Zum Highlight springen\"-Button im Youtube-Player anzeigen"
}, },
"showInfoButton": { "showInfoButton": {
"message": "Zeige Info-Knopf im Youtube-Videoplayer" "message": "Zeige Info-Knopf im Youtube-Videoplayer"
@ -210,13 +210,13 @@
"message": "Aktiviere den Übersprungen Zähler in Privaten/Incognito Tabs" "message": "Aktiviere den Übersprungen Zähler in Privaten/Incognito Tabs"
}, },
"enableTrackDownvotes": { "enableTrackDownvotes": {
"message": "Speichere Abschnitts-downvotes" "message": "Speichere Downvotes von Segmenten"
}, },
"whatTrackDownvotes": { "whatTrackDownvotes": {
"message": "Alle Segmente welche du negativ bewertest werden versteckt, selbst nach einer aktualisierung" "message": "Alle Segmente, welche du downvotest, werden verborgen und bleiben es auch dauerhaft"
}, },
"trackDownvotesWarning": { "trackDownvotesWarning": {
"message": "Warnung: Das deaktivieren wird alle vorher gespeicherten Downvotes löschen" "message": "Warnung: Das Deaktivieren wird alle vorher gespeicherten Downvotes löschen"
}, },
"enableQueryByHashPrefix": { "enableQueryByHashPrefix": {
"message": "Abfrage nach Hash-Präfix" "message": "Abfrage nach Hash-Präfix"
@ -437,7 +437,7 @@
"message": "Videosegmente, die kürzer als der festgelegte Wert sind, werden nicht übersprungen oder im Player angezeigt." "message": "Videosegmente, die kürzer als der festgelegte Wert sind, werden nicht übersprungen oder im Player angezeigt."
}, },
"skipNoticeDuration": { "skipNoticeDuration": {
"message": "Dauer der Überspringenbenachrichtigung (Sekunden):" "message": "Dauer der Überspringen-Meldung (Sekunden):"
}, },
"skipNoticeDurationDescription": { "skipNoticeDurationDescription": {
"message": "Die überspringen Benachrichtigung wird mindestens für so viele Sekunden angezeigt. Für manuelles Überspringen kann sie länger sichtbar sein." "message": "Die überspringen Benachrichtigung wird mindestens für so viele Sekunden angezeigt. Für manuelles Überspringen kann sie länger sichtbar sein."
@ -533,7 +533,7 @@
"message": "Die Debug-Informationen wurden in die Zwischenablage kopiert. Du kannst alle Informationen entfernen, die du nicht teilen möchtest. Verwende einen Texteditor um die Informationen in einer Textdatei zu speichern (um diese ggf. einem Fehlerbericht hinzuzufügen)." "message": "Die Debug-Informationen wurden in die Zwischenablage kopiert. Du kannst alle Informationen entfernen, die du nicht teilen möchtest. Verwende einen Texteditor um die Informationen in einer Textdatei zu speichern (um diese ggf. einem Fehlerbericht hinzuzufügen)."
}, },
"keyAlreadyUsed": { "keyAlreadyUsed": {
"message": "Diese Verknüpfung ist an eine andere Aktion gebunden. Bitte wählen Sie eine andere." "message": "Diese Verknüpfung ist an eine andere Aktion gebunden. Bitte wähle eine andere."
}, },
"to": { "to": {
"message": "bis", "message": "bis",
@ -796,7 +796,7 @@
"message": "Spenden" "message": "Spenden"
}, },
"considerDonating": { "considerDonating": {
"message": "Hilf beim finanzieren der Entwicklung" "message": "Unterstütze die Entwicklung mit einer Spende"
}, },
"hideDonationLink": { "hideDonationLink": {
"message": "Verstecke Spendenlink" "message": "Verstecke Spendenlink"
@ -865,7 +865,7 @@
"message": "Erfahre mehr" "message": "Erfahre mehr"
}, },
"CopyDownvoteButtonInfo": { "CopyDownvoteButtonInfo": {
"message": "Abwerten, und eine lokale Kopie zum erneuten Einreichen erstellen" "message": "Downvotet, und erstellt eine lokale Kopie zum erneuten Einreichen"
}, },
"OpenCategoryWikiPage": { "OpenCategoryWikiPage": {
"message": "Öffne den Wiki-Artikel dieser Kategorie." "message": "Öffne den Wiki-Artikel dieser Kategorie."
@ -883,7 +883,7 @@
"message": "Benutze das Mausrad während der Mauszeiger über dem Eingabefeld schwebt um die Zeit schnell anzupassen. Benutze Strg bzw. Shift für gröbere/genauere Änderungen." "message": "Benutze das Mausrad während der Mauszeiger über dem Eingabefeld schwebt um die Zeit schnell anzupassen. Benutze Strg bzw. Shift für gröbere/genauere Änderungen."
}, },
"categoryPillNewFeature": { "categoryPillNewFeature": {
"message": "Neu! Sehe, ob ein Video ausschließlich Sponsor oder Eigenwerbung ist" "message": "Neu! Sieh, ob ein Video ausschließlich Sponsor oder Eigenwerbung ist"
}, },
"dayAbbreviation": { "dayAbbreviation": {
"message": "T", "message": "T",
@ -914,7 +914,7 @@
"description": "Appears in Options as a tab header for advanced/niche options. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)." "description": "Appears in Options as a tab header for advanced/niche options. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
}, },
"noticeVisibilityLabel": { "noticeVisibilityLabel": {
"message": "Überspringen-Benachrichtigungs aussehen", "message": "Aussehen der Überspringen-Meldung",
"description": "Option label" "description": "Option label"
}, },
"unbind": { "unbind": {
@ -928,6 +928,6 @@
"message": "Ändern" "message": "Ändern"
}, },
"youtubeKeybindWarning": { "youtubeKeybindWarning": {
"message": "Dies ist ein vorhandenes YouTube-Kürzel. Sind Sie sicher, dass Sie diese verwenden möchten?" "message": "Dies ist ein vorhandenes YouTube-Kürzel. Bist du sicher, dass du es verwenden möchtest?"
} }
} }

View file

@ -14,7 +14,7 @@
"message": "Vous cherchez à envoyer beaucoup de segments, y en a-t-il vraiment autant ?" "message": "Vous cherchez à envoyer beaucoup de segments, y en a-t-il vraiment autant ?"
}, },
"409": { "409": {
"message": "Déja soumis" "message": "Ce segment a déjà été soumis auparavant"
}, },
"channelWhitelisted": { "channelWhitelisted": {
"message": "Chaîne mise sur liste blanche !" "message": "Chaîne mise sur liste blanche !"
@ -32,7 +32,7 @@
"message": "Signaler" "message": "Signaler"
}, },
"reportButtonInfo": { "reportButtonInfo": {
"message": "Signaler que ce segment commercial est incorrect." "message": "Signaler que cette soumission est incorrecte."
}, },
"Dismiss": { "Dismiss": {
"message": "Fermer" "message": "Fermer"
@ -98,7 +98,7 @@
"message": "A voté !" "message": "A voté !"
}, },
"serverDown": { "serverDown": {
"message": "Le serveur ne fonctionne pas. Contactez le développeur." "message": "Il semblerait que le serveur soit hors service. Contactez le développeur."
}, },
"connectionError": { "connectionError": {
"message": "Erreur de connexion. Code d'erreur : " "message": "Erreur de connexion. Code d'erreur : "
@ -171,7 +171,7 @@
"message": "Cacher" "message": "Cacher"
}, },
"Options": { "Options": {
"message": "Paramètres" "message": "Options"
}, },
"showButtons": { "showButtons": {
"message": "Montrer les boutons sur le lecteur YouTube" "message": "Montrer les boutons sur le lecteur YouTube"
@ -180,7 +180,7 @@
"message": "Cacher les boutons sur le lecteur YouTube" "message": "Cacher les boutons sur le lecteur YouTube"
}, },
"hideButtonsDescription": { "hideButtonsDescription": {
"message": "Cela permet de cacher du lecteur YouTube les boutons utilisés pour soumettre des segments commerciaux. Je peux \ncomprendre que certaines personnes les trouvent perturbants. Au lieu d'utiliser ces boutons, cette fenêtre peut être utilisée \npour soumettre des segments commerciaux. Pour cacher la notification, utilisez le bouton \"Ne plus montrer\" sur la notification. Vous pouvez toujours réactiver ces paramètres plus tard." "message": "Ceci enlève du lecteur YouTube les boutons permettant de soumettre des segments."
}, },
"showSkipButton": { "showSkipButton": {
"message": "Conserver le bouton \"Aller au point essentiel\" sur le lecteur" "message": "Conserver le bouton \"Aller au point essentiel\" sur le lecteur"
@ -192,7 +192,7 @@
"message": "Cacher le bouton Info sur le lecteur YouTube" "message": "Cacher le bouton Info sur le lecteur YouTube"
}, },
"autoHideInfoButton": { "autoHideInfoButton": {
"message": "Masquer Automatiquement Le Button Info" "message": "Masquer automatiquement le bouton Info"
}, },
"hideDeleteButton": { "hideDeleteButton": {
"message": "Cacher le bouton Supprimer sur le lecteur YouTube" "message": "Cacher le bouton Supprimer sur le lecteur YouTube"
@ -210,13 +210,13 @@
"message": "Activer le suivi du nombre de sauts dans les onglets privés/incognito" "message": "Activer le suivi du nombre de sauts dans les onglets privés/incognito"
}, },
"enableTrackDownvotes": { "enableTrackDownvotes": {
"message": "Enregistrer les segments votés contre" "message": "Enregistrer les segments contre lesquels vous avez voté"
}, },
"whatTrackDownvotes": { "whatTrackDownvotes": {
"message": "Tous les segments que vous votez contre vous resteront cachés même après rafraîchissement" "message": "Tous les segments que contre lesquels vous votez resteront cachés même après rafraîchissement de la page"
}, },
"trackDownvotesWarning": { "trackDownvotesWarning": {
"message": "Attention : Désactiver ceci supprimera tous les votes contre précédemment enregistrés" "message": "Attention : la désactivation supprimera tous vos votes précédemment enregistrés"
}, },
"enableQueryByHashPrefix": { "enableQueryByHashPrefix": {
"message": "Requête par préfixe du hash" "message": "Requête par préfixe du hash"
@ -228,7 +228,7 @@
"message": "Récupérer les segments sur les nouvelles vidéos" "message": "Récupérer les segments sur les nouvelles vidéos"
}, },
"whatRefetchWhenNotFound": { "whatRefetchWhenNotFound": {
"message": "Si la vidéo est nouvelle et qu'aucun segment n'a été trouvé, ils seront réactualisés toutes les quelques minutes pendant le visionnage." "message": "Si la vidéo vient de sortir et qu'aucun segment n'a été encore trouvé, SponsorBlock en cherchera durant la lecture de la vidéo."
}, },
"showNotice": { "showNotice": {
"message": "Afficher la notification" "message": "Afficher la notification"
@ -272,7 +272,7 @@
"description": "The second line of the message displayed after the notice was upgraded." "description": "The second line of the message displayed after the notice was upgraded."
}, },
"setSkipShortcut": { "setSkipShortcut": {
"message": "Sauter le segment", "message": "Passer le segment",
"description": "Keybind label" "description": "Keybind label"
}, },
"setStartSponsorShortcut": { "setStartSponsorShortcut": {
@ -284,7 +284,7 @@
"description": "Keybind label" "description": "Keybind label"
}, },
"keybindDescription": { "keybindDescription": {
"message": "Sélectionnez une touche en la tapant et choisissez n'importe quelles touches de modification que vous souhaitez utiliser." "message": "Sélectionnez une touche en utilisant le clavier et choisissez les touches de modification que vous souhaitez utiliser."
}, },
"0": { "0": {
"message": "Délai de connexion dépassé. Vérifiez votre connexion internet. Si votre connexion internet fonctionne, le serveur est probablement surchargé ou hors service." "message": "Délai de connexion dépassé. Vérifiez votre connexion internet. Si votre connexion internet fonctionne, le serveur est probablement surchargé ou hors service."
@ -446,7 +446,7 @@
"message": "Le segment suivant est plus court que votre option de durée minimale. Cela pourrait signifier qu'il est déjà soumis, et just ignoré par cette option. Êtes-vous sûr de vouloir soumettre ?" "message": "Le segment suivant est plus court que votre option de durée minimale. Cela pourrait signifier qu'il est déjà soumis, et just ignoré par cette option. Êtes-vous sûr de vouloir soumettre ?"
}, },
"liveOrPremiere": { "liveOrPremiere": {
"message": "La soumission sur un livestream actif ou une première n'est pas autorisée. Veuillez attendre qu'il termine, puis actualisez la page et vérifiez que les segments sont toujours valides." "message": "La soumission de segments sur un direct en cours ou une première n'est pas autorisée. Veuillez attendre qu'il soit terminé puis actualisez la page et vérifiez que les segments sont toujours valides."
}, },
"showUploadButton": { "showUploadButton": {
"message": "Afficher le bouton de téléchargement" "message": "Afficher le bouton de téléchargement"
@ -485,7 +485,7 @@
"message": "Charger à partir du fichier" "message": "Charger à partir du fichier"
}, },
"whatExportOptions": { "whatExportOptions": {
"message": "C'est votre configuration complète au format JSON. Elle inclut votre identifiant utilisateur, gardez-la pour vous." "message": "Contient toute votre configuration au format JSON. Inclut votre UserID privé, donc ne partagez pas ce fichier."
}, },
"setOptions": { "setOptions": {
"message": "Définir les options" "message": "Définir les options"
@ -527,20 +527,20 @@
"message": "Impossible de copier dans le presse-papiers" "message": "Impossible de copier dans le presse-papiers"
}, },
"copyDebugInformationOptions": { "copyDebugInformationOptions": {
"message": "Copie les informations dans le presse-papiers pour les fournir aux développeurs lors d'un rapport de bug ou lorsqu'un développeur le demande. Les informations sensibles telles que l'ID d'utilisateur, les chaînes sur liste blanche ou l'adresse du serveur personnalisé ont été supprimées. Cependant, ça contient des informations telles que votre user-agent, votre navigateur, votre système d'exploitation et le numéro de version d'extension. " "message": "Copie les informations dans le presse-papiers de manière à les fournir à l'équipe de développement dans un rapport de bug ou si on vous le demande. Les informations personnelles telles que le UserID privé, les chaînes sur liste blanche ou l'adresse du serveur personnalisé sont retirées des données copiées. Cependant, des informations telles que votre user-agent, votre navigateur web, votre système d'exploitation ou le numéro de version d'extension de SponsorBlock font partie des données copiées. "
}, },
"copyDebugInformationComplete": { "copyDebugInformationComplete": {
"message": "Les informations de débogage ont été copiées dans le presse-papiers. N'hésitez pas à supprimer toute information que vous ne préférez pas partager. Enregistrez-les dans un fichier texte ou collez-les dans le rapport de bug." "message": "Les informations de débogage ont été copiées dans le presse-papiers. N'hésitez pas à supprimer toute information que vous ne souhaitez pas partager. Enregistrez-les dans un fichier texte ou collez-les dans le rapport de bug."
}, },
"keyAlreadyUsed": { "keyAlreadyUsed": {
"message": "Ce raccourci est lié à une autre action. Veuillez en sélectionner un autre." "message": "Ce raccourci est lié à une autre action. Veuillez en choisir un autre."
}, },
"to": { "to": {
"message": "à", "message": "à",
"description": "Used between segments. Example: 1:20 to 1:30" "description": "Used between segments. Example: 1:20 to 1:30"
}, },
"category_sponsor": { "category_sponsor": {
"message": "Message commercial" "message": "Message sponsorisé"
}, },
"category_sponsor_description": { "category_sponsor_description": {
"message": "Promotion rémunérée, parrainage rémunéré et publicité directe. Pas pour l'autopromotion ou les présentations gratuites de causes, de créateurs, de sites web ou de produits qu'ils aiment." "message": "Promotion rémunérée, parrainage rémunéré et publicité directe. Pas pour l'autopromotion ou les présentations gratuites de causes, de créateurs, de sites web ou de produits qu'ils aiment."
@ -555,10 +555,10 @@
"message": "Accès exclusif" "message": "Accès exclusif"
}, },
"category_exclusive_access_description": { "category_exclusive_access_description": {
"message": "Seulement pour étiqueter des vidéos entières. Utilisé quand une vidéo présente un produit, un service ou un emplacement auquel ils ont reçu un accès gratuit ou subventionné." "message": "Sert uniquement à étiqueter les vidéos entièrement sponsorisées. Utilisé quand une vidéo présente un produit, un service ou un emplacement pour lesquels un accès gratuit ou subventionné a été reçu."
}, },
"category_exclusive_access_pill": { "category_exclusive_access_pill": {
"message": "Cette vidéo présente un produit, un service ou un emplacement auquel ils ont reçu un accès gratuit ou subventionné", "message": "Cette vidéo présente un produit, un service ou un lieu pour lequel un accès gratuit ou subventionné a été reçu",
"description": "Short description for this category" "description": "Short description for this category"
}, },
"category_interaction": { "category_interaction": {
@ -574,7 +574,7 @@
"message": "Entracte/Animation d'intro" "message": "Entracte/Animation d'intro"
}, },
"category_intro_description": { "category_intro_description": {
"message": "Un intervalle sans réel contenu, comme une pause, une image statique ou une animation répétitive. Ne doit pas être utilisé pour les transitions avec des informations." "message": "Un intervalle sans réel contenu, par exemple une pause, une image statique ou une animation répétitive. N'utilisez pas cette catégorie pour les transitions contenant de l'information."
}, },
"category_intro_short": { "category_intro_short": {
"message": "Entracte" "message": "Entracte"
@ -595,7 +595,7 @@
"message": "Digressions/Blagues" "message": "Digressions/Blagues"
}, },
"category_filler_description": { "category_filler_description": {
"message": "Des digressions ajoutées uniquement pour le remplissage ou l'humour qui ne sont pas requis pour comprendre le contenu principal de la vidéo. Cela ne devrait pas inclure des segments fournissant du contexte ou des détails de fond." "message": "Digressions ajoutées uniquement dans un but de remplissage ou de l'humour non requis pour comprendre le sujet principal de la vidéo. Ne doit pas inclure des segments fournissant du contexte ou des détails de fond."
}, },
"category_filler_short": { "category_filler_short": {
"message": "Remplissage" "message": "Remplissage"
@ -652,7 +652,7 @@
"message": "Autoriser les segments qui bloquent l'audio au lieu de le passer" "message": "Autoriser les segments qui bloquent l'audio au lieu de le passer"
}, },
"fullVideoSegments": { "fullVideoSegments": {
"message": "Afficher une icône lorsqu'une vidéo est promotionnelle", "message": "Afficher une icône lorsqu'une vidéo est entièrement promotionnelle",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo" "description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
}, },
"previewColor": { "previewColor": {
@ -692,7 +692,7 @@
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options." "description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
}, },
"poiOnlyOneSegment": { "poiOnlyOneSegment": {
"message": "Avertissement: Ce type de segment peut avoir au maximum un seul actif à la fois. En soumettant plusieurs segments, un seul aléatoire sera affiché." "message": "Attention : un seul segment de ce type de segment peut être actif à la fois. En soumettant plusieurs segments, un seul d'entre eux sera aléatoirement affiché."
}, },
"youMustSelectACategory": { "youMustSelectACategory": {
"message": "Vous devez sélectionner une catégorie pour tous les segments que vous soumettez !" "message": "Vous devez sélectionner une catégorie pour tous les segments que vous soumettez !"
@ -707,7 +707,7 @@
"message": "masqué : trop court" "message": "masqué : trop court"
}, },
"manuallyHidden": { "manuallyHidden": {
"message": "masquer manuellement" "message": "masqué manuellement"
}, },
"channelDataNotFound": { "channelDataNotFound": {
"description": "This error appears in an alert when they try to whitelist a channel and the extension is unable to determine what channel they are looking at.", "description": "This error appears in an alert when they try to whitelist a channel and the extension is unable to determine what channel they are looking at.",
@ -735,7 +735,7 @@
"message": "Forcer la vérification du canal avant de passer" "message": "Forcer la vérification du canal avant de passer"
}, },
"whatForceChannelCheck": { "whatForceChannelCheck": {
"message": "Par défaut, passer les segments avant même de savoir à quelle chaîne appartient la vidéo. Par défaut, les segments en début des vidéos des chaînes sur liste blanche peuvent être passés. Activer cette option empêchera cela mais passer les segments aura un délai, car obtenir l'id des chaînes peut prendre du temps. Ce délai sera imperceptible si votre connexion est rapide." "message": "Par défaut, les segments sont passés avant même de savoir à quelle chaîne la vidéo appartient. Par défaut, certains segments en début de vidéo des chaînes sur liste blanche peuvent être involontairement passés. Activer cette option évitera ce problème mais le passage des segments aura un léger retard, du fait que l'obtention du ChannelID prend du temps. Ce retard devrait être imperceptible si vous avez un haut débit internet."
}, },
"forceChannelCheckPopup": { "forceChannelCheckPopup": {
"message": "Envisagez d'activer \"Forcez la vérification de la chaîne avant de passer\"" "message": "Envisagez d'activer \"Forcez la vérification de la chaîne avant de passer\""
@ -773,10 +773,10 @@
"description": "Used as the button to dismiss a tooltip" "description": "Used as the button to dismiss a tooltip"
}, },
"fullVideoTooltipWarning": { "fullVideoTooltipWarning": {
"message": "Ce segment est long. Si toute la vidéo parle d'un seul sujet, changer \"Passer\" en \"Toute la vidéo\". Voir les directives pour plus d'informations." "message": "Ce segment est long. Si toute la vidéo parle d'un seul sujet, changer de \"Passer\" à \"Toute la vidéo\". Voir les instructions pour plus d'informations."
}, },
"categoryPillTitleText": { "categoryPillTitleText": {
"message": "Cette vidéo entière est étiquetée avec cette catégorie qui est trop intégrée pour l'en séparer" "message": "L'intégralité de cette vidéo est classée dans cette catégorie ce qui la rend trop intriquée pour l'en séparer"
}, },
"experiementOptOut": { "experiementOptOut": {
"message": "Se désinscrire de toutes les futures expériences", "message": "Se désinscrire de toutes les futures expériences",
@ -786,7 +786,7 @@
"message": "Cacher pour toujours" "message": "Cacher pour toujours"
}, },
"warningChatInfo": { "warningChatInfo": {
"message": "Vous avez reçu un avertissement et ne pouvez pas soumettre de segments temporairement. Cela signifie que nous avons remarqué que vous commettiez des erreurs courantes qui ne sont pas malveillantes. Veuillez simplement confirmer que vous comprenez les règles et nous supprimerons l'avertissement. Vous pouvez également rejoindre cette discussion en utilisant discord.gg/SponsorBlock ou matrix.to/#/#sponsor:ajay.app" "message": "Vous avez reçu un avertissement et ne pouvez temporairement pas soumettre de segments. Cela signifie que nous avons remarqué que vous commettiez des erreurs courantes non malveillantes. Veuillez confirmer que vous comprenez le règlement et nous supprimerons l'avertissement. Vous pouvez également rejoindre cette discussion en utilisant discord.gg/SponsorBlock ou matrix.to/#/#sponsor:ajay.app"
}, },
"voteRejectedWarning": { "voteRejectedWarning": {
"message": "Le vote a été rejeté en raison d'un avertissement. Cliquez pour ouvrir un chat et y mettre fin , ou revenez plus tard lorsque vous avez le temps.", "message": "Le vote a été rejeté en raison d'un avertissement. Cliquez pour ouvrir un chat et y mettre fin , ou revenez plus tard lorsque vous avez le temps.",
@ -802,7 +802,7 @@
"message": "Cacher le lien de don" "message": "Cacher le lien de don"
}, },
"darkModeOptionsPage": { "darkModeOptionsPage": {
"message": "Mode sombre sur la page options" "message": "Page options affichée en mode sombre"
}, },
"helpPageThanksForInstalling": { "helpPageThanksForInstalling": {
"message": "Merci d'avoir installé SponsorBlock." "message": "Merci d'avoir installé SponsorBlock."
@ -865,10 +865,10 @@
"message": "En savoir plus" "message": "En savoir plus"
}, },
"CopyDownvoteButtonInfo": { "CopyDownvoteButtonInfo": {
"message": "Voter contre et crée une copie locale pour la resoumettre" "message": "Vote contre et crée une copie locale à soumettre à nouveau"
}, },
"OpenCategoryWikiPage": { "OpenCategoryWikiPage": {
"message": "Ouvrez la page wiki de cette catégorie." "message": "Ouvrir la page wiki de cette catégorie."
}, },
"CopyAndDownvote": { "CopyAndDownvote": {
"message": "Copier et voter contre" "message": "Copier et voter contre"
@ -880,10 +880,10 @@
"message": "Cela s'appliquera instantanément à vos segments" "message": "Cela s'appliquera instantanément à vos segments"
}, },
"SponsorTimeEditScrollNewFeature": { "SponsorTimeEditScrollNewFeature": {
"message": "Utilisez la molette de votre souris en survolant la boîte d'édition pour ajuster rapidement le minutage. Les combinaisons de touches Ctrl ou Shift peuvent être utilisées pour affiner les modifications." "message": "Utilisez la molette de votre souris en survolant la boîte d'édition pour ajuster rapidement le minutage. Les combinaisons de touches ctrl ou maj peuvent être utilisées pour affiner les modifications."
}, },
"categoryPillNewFeature": { "categoryPillNewFeature": {
"message": "Nouveau! Voir quand une vidéo est entièrement sponsorisée ou de l'autopromotion" "message": "Nouveau ! Soyez prévenu-e quand une vidéo est entièrement sponsorisée ou autopromotionnelle"
}, },
"dayAbbreviation": { "dayAbbreviation": {
"message": "j", "message": "j",
@ -914,7 +914,7 @@
"description": "Appears in Options as a tab header for advanced/niche options. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)." "description": "Appears in Options as a tab header for advanced/niche options. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
}, },
"noticeVisibilityLabel": { "noticeVisibilityLabel": {
"message": "Apparence d'avis de saut", "message": "Sauter l'affichage de l'avertissement",
"description": "Option label" "description": "Option label"
}, },
"unbind": { "unbind": {
@ -928,6 +928,6 @@
"message": "Changer" "message": "Changer"
}, },
"youtubeKeybindWarning": { "youtubeKeybindWarning": {
"message": "Il s'agit d'un raccourci YouTube intégré. Êtes-vous sûr de vouloir l'utiliser ?" "message": "Il s'agit d'un raccourci intégré à YouTube. Êtes-vous sûr de vouloir l'utiliser ?"
} }
} }

View file

@ -592,7 +592,7 @@
"message": "Rekapan singkat dari episode sebelumnya, atau pratinjau tentang apa yang akan terjadi nanti di video. Dimaksudkan untuk klip bersama yang di edit, bukan ringkasan yang diucapkan." "message": "Rekapan singkat dari episode sebelumnya, atau pratinjau tentang apa yang akan terjadi nanti di video. Dimaksudkan untuk klip bersama yang di edit, bukan ringkasan yang diucapkan."
}, },
"category_filler": { "category_filler": {
"message": "Pengisi Tangent/Jokes" "message": "Pengisi Tak berkaitan/Lawakan"
}, },
"category_filler_description": { "category_filler_description": {
"message": "Adegan tangensial ditambahkan hanya untuk pengisi atau humor yang tidak diperlukan untuk memahami isi utama video. Ini tidak boleh mencakup segmen yang memberikan detail konteks atau latar belakang." "message": "Adegan tangensial ditambahkan hanya untuk pengisi atau humor yang tidak diperlukan untuk memahami isi utama video. Ini tidak boleh mencakup segmen yang memberikan detail konteks atau latar belakang."

View file

@ -586,7 +586,7 @@
"message": "I titoli di coda o quando vengono mostrate annotazioni a fine video su YouTube. Non per conclusioni provviste di informazioni." "message": "I titoli di coda o quando vengono mostrate annotazioni a fine video su YouTube. Non per conclusioni provviste di informazioni."
}, },
"category_preview": { "category_preview": {
"message": "Anteprima" "message": "Anteprima/Riepilogo"
}, },
"category_preview_description": { "category_preview_description": {
"message": "Riepilogo rapido degli episodi precedenti, o un'anteprima di ciò che sta arrivando più tardi nel video attuale. Inteso per clip, non per riassunti a voce." "message": "Riepilogo rapido degli episodi precedenti, o un'anteprima di ciò che sta arrivando più tardi nel video attuale. Inteso per clip, non per riassunti a voce."

View file

@ -14,7 +14,7 @@
"message": "一つの動画に対してあまりに多くのセグメントを提案しています。本当にこれだけ必要ですか?" "message": "一つの動画に対してあまりに多くのセグメントを提案しています。本当にこれだけ必要ですか?"
}, },
"409": { "409": {
"message": "これは既に提されています。" "message": "これは既に提されています。"
}, },
"channelWhitelisted": { "channelWhitelisted": {
"message": "チャンネルをホワイトリストに登録しました!" "message": "チャンネルをホワイトリストに登録しました!"
@ -23,7 +23,7 @@
"message": "セグメント" "message": "セグメント"
}, },
"Segments": { "Segments": {
"message": "セグメント" "message": "セグメント"
}, },
"upvoteButtonInfo": { "upvoteButtonInfo": {
"message": "この提案を支持" "message": "この提案を支持"
@ -41,7 +41,7 @@
"message": "読み込み中..." "message": "読み込み中..."
}, },
"Hide": { "Hide": {
"message": "非表示" "message": "再度表示しない"
}, },
"hitGoBack": { "hitGoBack": {
"message": "スキップ解除を押すと元の場所へ戻ります" "message": "スキップ解除を押すと元の場所へ戻ります"
@ -119,7 +119,7 @@
"message": "本当に提出してよろしいですか?" "message": "本当に提出してよろしいですか?"
}, },
"whitelistChannel": { "whitelistChannel": {
"message": "ホワイトリストのチャンネル" "message": "チャンネルをホワイトリストに追加"
}, },
"removeFromWhitelist": { "removeFromWhitelist": {
"message": "ホワイトリストからチャンネルを削除" "message": "ホワイトリストからチャンネルを削除"
@ -183,13 +183,13 @@
"message": "YouTube再生画面のセグメント提出ボタンを非表示にします。" "message": "YouTube再生画面のセグメント提出ボタンを非表示にします。"
}, },
"showSkipButton": { "showSkipButton": {
"message": "プレイヤーの「ハイライトまでスキップ」ボタン表示を維持する" "message": "「ハイライトまでスキップ」ボタンをプレイヤーに常に表示する"
}, },
"showInfoButton": { "showInfoButton": {
"message": "YouTubeプレヤーに情報ボタンを表示する" "message": "YouTubeプレヤーに情報ボタンを表示する"
}, },
"hideInfoButton": { "hideInfoButton": {
"message": "YouTubeプレヤーに情報ボタンを表示しない" "message": "YouTubeプレヤーに情報ボタンを表示しない"
}, },
"autoHideInfoButton": { "autoHideInfoButton": {
"message": "情報ボタンを自動的に隠す" "message": "情報ボタンを自動的に隠す"
@ -201,13 +201,13 @@
"message": "YouTubeプレーヤーに削除ボタンを表示" "message": "YouTubeプレーヤーに削除ボタンを表示"
}, },
"enableViewTracking": { "enableViewTracking": {
"message": "スキップ回数の追跡を有効にする" "message": "スキップの集計を有効にする"
}, },
"whatViewTracking": { "whatViewTracking": {
"message": "この機能は、あなたがスキップしたセグメントを追跡して、そのセグメントがどれだけ役に立ったかを他のユーザーに知らせることで、スパムがデータベースに紛れないようにするための評価基準として使用されます。あなたがセグメントをスキップするたびに、拡張機能はサーバーにメッセージを送信します。使用回数の統計が正確になるよう、できる限り多くの人がこの設定を変更しないことを望みます。:)" "message": "この機能は、あなたがスキップしたセグメントを追跡して、そのセグメントがどれだけ役に立ったかを他のユーザーに知らせることで、スパムがデータベースに紛れないようにするための評価基準として使用されます。あなたがセグメントをスキップするたびに、拡張機能はサーバーにメッセージを送信します。使用回数の統計が正確になるよう、できる限り多くの人がこの設定を変更しないことを望みます。:)"
}, },
"enableViewTrackingInPrivate": { "enableViewTrackingInPrivate": {
"message": "プライベート/シークレット タブでスキップカウントトラッキングを有効にする" "message": "プライベート/シークレット タブでのスキップ回数の集計を有効にする"
}, },
"enableTrackDownvotes": { "enableTrackDownvotes": {
"message": "セグメントの低評価を記録" "message": "セグメントの低評価を記録"
@ -237,19 +237,19 @@
"message": "セグメントがスキップされた後に通知を表示する" "message": "セグメントがスキップされた後に通知を表示する"
}, },
"noticeVisibilityMode0": { "noticeVisibilityMode0": {
"message": "標準サイズのスキップ通知" "message": "通常サイズのスキップ通知"
}, },
"noticeVisibilityMode1": { "noticeVisibilityMode1": {
"message": "自動スキップ時に小の通知" "message": "自動スキップ時に小サイズの通知"
}, },
"noticeVisibilityMode2": { "noticeVisibilityMode2": {
"message": "常に小のスキップ通知" "message": "常に小サイズのスキップ通知"
}, },
"noticeVisibilityMode3": { "noticeVisibilityMode3": {
"message": "自動スキップ時に半透明の通知" "message": "自動スキップ時に透過タイプの通知"
}, },
"noticeVisibilityMode4": { "noticeVisibilityMode4": {
"message": "常に半透明のスキップ通知" "message": "常に透過タイプのスキップ通知"
}, },
"longDescription": { "longDescription": {
"message": "SponsorBlockはスポンサー、イントロ、アウトロ、チャンネル登録のお願いなど、YouTube動画の煩わしい部分をスキップします。SponsorBlockはYouTube動画のスポンサー付きセグメントなどの開始時間と終了時間を誰でも投稿できる、クラウドソースのブラウザ拡張機能です。一人がセグメントの情報を送信すると、この拡張機能を使用している他の全員が、スポンサー付きセグメントをスキップできるようになります。また、ミュージックビデオの音楽がない部分をスキップすることもできます。", "message": "SponsorBlockはスポンサー、イントロ、アウトロ、チャンネル登録のお願いなど、YouTube動画の煩わしい部分をスキップします。SponsorBlockはYouTube動画のスポンサー付きセグメントなどの開始時間と終了時間を誰でも投稿できる、クラウドソースのブラウザ拡張機能です。一人がセグメントの情報を送信すると、この拡張機能を使用している他の全員が、スポンサー付きセグメントをスキップできるようになります。また、ミュージックビデオの音楽がない部分をスキップすることもできます。",
@ -319,14 +319,14 @@
"message": "{0} をスキップしますか?" "message": "{0} をスキップしますか?"
}, },
"mute_category": { "mute_category": {
"message": "{0} をミュートしますか?" "message": "{0} をミュートしますか"
}, },
"skip_to_category": { "skip_to_category": {
"message": "{0}まで飛び越しますか?", "message": "{0}までスキップしますか?",
"description": "Used for skipping to things (Skip to Highlight)" "description": "Used for skipping to things (Skip to Highlight)"
}, },
"skipped": { "skipped": {
"message": "{0}を飛び越しました", "message": "{0}をスキップしました",
"description": "Example: Sponsor Skipped" "description": "Example: Sponsor Skipped"
}, },
"muted": { "muted": {
@ -334,7 +334,7 @@
"description": "Example: Sponsor Muted" "description": "Example: Sponsor Muted"
}, },
"skipped_to_category": { "skipped_to_category": {
"message": "{0}まで飛び越しました", "message": "{0}までスキップしました",
"description": "Used for skipping to things (Skipped to Highlight)" "description": "Used for skipping to things (Skipped to Highlight)"
}, },
"disableAutoSkip": { "disableAutoSkip": {
@ -356,7 +356,7 @@
"message": "この時間は、シークバーの下にある現在の時間の隣に表示されます。これは、動画の合計時間からすべてのセグメントの時間を差し引いたもので「シークバーに表示」として設定されているセグメントも含まれます。" "message": "この時間は、シークバーの下にある現在の時間の隣に表示されます。これは、動画の合計時間からすべてのセグメントの時間を差し引いたもので「シークバーに表示」として設定されているセグメントも含まれます。"
}, },
"youHaveSkipped": { "youHaveSkipped": {
"message": "スキップしたセグメント数: " "message": "スキップした数: "
}, },
"minLower": { "minLower": {
"message": "分" "message": "分"
@ -385,7 +385,7 @@
"message": "ユーザーIDのインポート/エクスポート" "message": "ユーザーIDのインポート/エクスポート"
}, },
"whatChangeUserID": { "whatChangeUserID": {
"message": "この情報を誰にも開示しないでください。これはパスワードのように、誰とも共有するべきではありません。 誰かがこれを持っている場合、あなたになりすますことができます。パブリックユーザーIDを探している場合は、ポップアップのクリップボードアイコンをクリックしてください。" "message": "これは厳重に保管してください。これはパスワードのようなもので、誰とも共有すべきではありません。 他の誰かがこれを使って、あなたになりすますことができてしまいます。なおパブリックユーザーIDを探している場合は、ポップアップのクリップボードアイコンをクリックしてください。"
}, },
"setUserID": { "setUserID": {
"message": "ユーザーIDを設定" "message": "ユーザーIDを設定"
@ -407,7 +407,7 @@
"message": "対応サイト: " "message": "対応サイト: "
}, },
"optionsInfo": { "optionsInfo": {
"message": "Invidious対応を有効にし,自動飛越を無効にし,GUIを非表示にします。" "message": "Invidious対応を有効にし、自動スキップを無効、GUIを非表示にします。"
}, },
"addInvidiousInstance": { "addInvidiousInstance": {
"message": "サードパーティーのクライアントインスタンスを追加" "message": "サードパーティーのクライアントインスタンスを追加"
@ -437,7 +437,7 @@
"message": "設定値より短いセグメントはスキップされず、プレーヤーにも表示されません。" "message": "設定値より短いセグメントはスキップされず、プレーヤーにも表示されません。"
}, },
"skipNoticeDuration": { "skipNoticeDuration": {
"message": "飛び越し通知の表示時間(秒):" "message": "スキップ通知の表示時間(秒):"
}, },
"skipNoticeDurationDescription": { "skipNoticeDurationDescription": {
"message": "飛び越し通知が画面上に表示され続ける時間です。手動で飛び越した場合は,より長く表示される可能性があります。" "message": "飛び越し通知が画面上に表示され続ける時間です。手動で飛び越した場合は,より長く表示される可能性があります。"
@ -485,7 +485,7 @@
"message": "ファイルから読み込み" "message": "ファイルから読み込み"
}, },
"whatExportOptions": { "whatExportOptions": {
"message": "JSON形式の個人設定全体です。利用者IDが含まれているので共有するときは注意してください。" "message": "JSON形式のすべての個人設定です。これにはあなたのユーザーIDが含まれているので、共有するときは注意してください。"
}, },
"setOptions": { "setOptions": {
"message": "オプション設定" "message": "オプション設定"
@ -500,7 +500,7 @@
"message": "セグメントを送信" "message": "セグメントを送信"
}, },
"submit": { "submit": {
"message": "送信" "message": "提出"
}, },
"cancel": { "cancel": {
"message": "キャンセル" "message": "キャンセル"
@ -549,13 +549,13 @@
"message": "無報酬 / セルフプロモーション" "message": "無報酬 / セルフプロモーション"
}, },
"category_selfpromo_description": { "category_selfpromo_description": {
"message": "無報酬での宣伝あるいは自己販促を除いて「提供者」と同様です。商品・寄付・合作情報にかんする節を含みます。" "message": "無報酬での宣伝あるいは自己販促であるという点を除いては「スポンサー」と同様です。商品、寄付、コラボ情報に関する内容を含みます。"
}, },
"category_exclusive_access": { "category_exclusive_access": {
"message": "限定アクセス" "message": "限定アクセス"
}, },
"category_exclusive_access_description": { "category_exclusive_access_description": {
"message": "動画全体に対してのみ付与できます。無償または補助金を受けて、製品、サービス、場所を紹介する動画。" "message": "動画全体に対してのみ付与できます。無償または補助金を受けて、製品、サービス、場所を紹介する動画に使用。"
}, },
"category_exclusive_access_pill": { "category_exclusive_access_pill": {
"message": "この動画は無償または補助金を受けて利用した製品、サービス、または場所を紹介するものです", "message": "この動画は無償または補助金を受けて利用した製品、サービス、または場所を紹介するものです",
@ -595,10 +595,10 @@
"message": "無駄な脱線/冗談" "message": "無駄な脱線/冗談"
}, },
"category_filler_description": { "category_filler_description": {
"message": "脱線したシーンには、動画の主な内容を理解するのに必要がない穴埋めやユーモアのみを追加してください。これには、文脈や背景の詳細を提供するセグメントを含めないでください。" "message": "動画の本編を理解するのに必要のない、繋ぎの話やユーモアによって脱線したシーン。これには、文脈や背景の詳細を提供しているセグメントを含めないでください。"
}, },
"category_filler_short": { "category_filler_short": {
"message": "フィラー" "message": "繋ぎの話"
}, },
"category_music_offtopic": { "category_music_offtopic": {
"message": "音楽: 音楽以外のセクション" "message": "音楽: 音楽以外のセクション"
@ -613,7 +613,7 @@
"message": "ハイライト" "message": "ハイライト"
}, },
"category_poi_highlight_description": { "category_poi_highlight_description": {
"message": "多くの人が求めている動画の部分。「動画はXからスタート」のようなコメントです。" "message": "多くの人が求めている動画の部分。「本編はXから開始」といったコメントのような機能です。"
}, },
"category_livestream_messages": { "category_livestream_messages": {
"message": "ライブ配信: 寄付/メッセージの読み上げ" "message": "ライブ配信: 寄付/メッセージの読み上げ"
@ -652,7 +652,7 @@
"message": "スキップする代わりに音声をミュートしてセグメントを許可" "message": "スキップする代わりに音声をミュートしてセグメントを許可"
}, },
"fullVideoSegments": { "fullVideoSegments": {
"message": "動画全体が広告の場合アイコンを表示", "message": "動画全体が広告の場合アイコンを表示",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo" "description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
}, },
"previewColor": { "previewColor": {
@ -673,10 +673,10 @@
"message": "ベータテストサーバーを有効にする" "message": "ベータテストサーバーを有効にする"
}, },
"whatEnableTestingServer": { "whatEnableTestingServer": {
"message": "提出した区域と区域への投票が主サーバーで**取り扱われなく**なります。試験目的にのみ利用してください。" "message": "提出したセグメントと投票がメインサーバーで**取り扱われなく**なります。試験目的にのみ利用してください。"
}, },
"testingServerWarning": { "testingServerWarning": {
"message": "試サーバーに接続している間,全ての提出・投票は主サーバーで取り扱われなくなります。実際の提出・投票を行う際は,この設定を無効にしてください。" "message": "テストサーバーに接続している間、全ての提出・投票はメインサーバーでは取り扱われなくなります。実際の提出・投票を行う際は、この設定を無効にしてください。"
}, },
"bracketNow": { "bracketNow": {
"message": "(今)" "message": "(今)"
@ -747,7 +747,7 @@
"message": "カテゴリーを変更" "message": "カテゴリーを変更"
}, },
"nonMusicCategoryOnMusic": { "nonMusicCategoryOnMusic": {
"message": "この動画は音楽として分類されています。本当にこの動画にスポンサー部分がありますか? 本セグメントが本当に「音楽以外の区域」だった場合は、設定画面からこの分類を有効にしてください。その後、「スポンサー部分」の代わりに「音楽以外のセグメント」としてセグメントを提出できます。よく分からない場合は、ガイドラインを参照してください。" "message": "この動画は音楽として分類されています。本当にこの動画にスポンサー部分がありますか このセグメントが実際には「音楽以外のセグメント」である場合、設定画面からこのカテゴリーを有効にしてください。「スポンサー」の代わりに「音楽以外」としてセグメントを提出できます。お困りの場合は、ガイドラインを参照してください。"
}, },
"multipleSegments": { "multipleSegments": {
"message": "複数のセグメント" "message": "複数のセグメント"
@ -786,7 +786,7 @@
"message": "二度と表示しない" "message": "二度と表示しない"
}, },
"warningChatInfo": { "warningChatInfo": {
"message": "警告によりあなたは一時的にセグメントを提出することができなくなりました。これはあなたが悪意のない一般的なミスを犯していることに私たちが気づいた事を意味します。ルールを理解していることを確認していただければこの警告は解除します。discord.gg/SponsorBlock または matrix.to/#/#sponsor:ajay.app よりこのチャットに参加することもできます。" "message": "警告によりあなたは一時的にセグメントを提出することができません。これはあなたが悪意からではなく、単に誤った行為をしていることを私たちが認識したためです。ルールを理解していることを確認していただければこの警告は解除します。discord.gg/SponsorBlock または matrix.to/#/#sponsor:ajay.app よりチャットに参加することもできます。"
}, },
"voteRejectedWarning": { "voteRejectedWarning": {
"message": "警告により投票が拒否されました。クリックして運営に連絡するか,少し時間を置いてからやりなおしてください。", "message": "警告により投票が拒否されました。クリックして運営に連絡するか,少し時間を置いてからやりなおしてください。",
@ -796,7 +796,7 @@
"message": "寄付" "message": "寄付"
}, },
"considerDonating": { "considerDonating": {
"message": "開発資金を援する" "message": "開発援する"
}, },
"hideDonationLink": { "hideDonationLink": {
"message": "寄付のお願いを表示しない" "message": "寄付のお願いを表示しない"
@ -811,10 +811,10 @@
"message": "以下の設定を確認してください" "message": "以下の設定を確認してください"
}, },
"helpPageFeatureDisclaimer": { "helpPageFeatureDisclaimer": {
"message": "多くの機能は既定では無効となっています。動画の導入部や最後の余計な部分を飛び越したい場合は「非本質的な内容」を飛び越すようにしてください。またUI要素の表示・非表示を切り替えることもできます。" "message": "多くの機能がデフォルトでは無効となっています。イントロ・アウトロをスキップしたり、Invidiousで使用したりするにはこの下で有効にしてください。また画面の表示設定を切り替えることもできます。"
}, },
"helpPageHowSkippingWorks": { "helpPageHowSkippingWorks": {
"message": "飛び越しの仕組み" "message": "スキップの仕組み"
}, },
"helpPageHowSkippingWorks1": { "helpPageHowSkippingWorks1": {
"message": "データベースにある動画区域が自動的に飛び越されます。この拡張機能のアイコンをクリックすると,区域の位置や範囲を確かめることができます。" "message": "データベースにある動画区域が自動的に飛び越されます。この拡張機能のアイコンをクリックすると,区域の位置や範囲を確かめることができます。"
@ -823,7 +823,7 @@
"message": "区域を飛び越すたびに通知されます。区域の範囲がおかしいと思ったら,その区域を低評価してください。ポップアップ画面でも同様に投票ができます。" "message": "区域を飛び越すたびに通知されます。区域の範囲がおかしいと思ったら,その区域を低評価してください。ポップアップ画面でも同様に投票ができます。"
}, },
"Submitting": { "Submitting": {
"message": "提出" "message": "提出する"
}, },
"helpPageSubmitting1": { "helpPageSubmitting1": {
"message": "提出するにはポップアップの「セグメント開始を記録」ボタン、またはビデオプレーヤー内にあるボタンを押してください。" "message": "提出するにはポップアップの「セグメント開始を記録」ボタン、またはビデオプレーヤー内にあるボタンを押してください。"
@ -832,22 +832,22 @@
"message": "再生ボタンをクリックするとセグメントの開始、停止アイコンをクリックすると終了となります。 複数のスポンサーを用意してから送信ボタンを押すことができます。アップロードボタンをクリックすると提出されます。ゴミ箱をクリックすると削除されます。" "message": "再生ボタンをクリックするとセグメントの開始、停止アイコンをクリックすると終了となります。 複数のスポンサーを用意してから送信ボタンを押すことができます。アップロードボタンをクリックすると提出されます。ゴミ箱をクリックすると削除されます。"
}, },
"Editing": { "Editing": {
"message": "編集" "message": "編集する"
}, },
"helpPageEditing1": { "helpPageEditing1": {
"message": "もし失敗しても、上矢印ボタンをクリックすれば、セグメントを編集・削除することができます。" "message": "もし間違えてしまっても、上矢印ボタンをクリックでセグメントを編集・削除することができます。"
}, },
"helpPageTooSlow": { "helpPageTooSlow": {
"message": "遅すぎます" "message": "こんな操作は面倒?"
}, },
"helpPageTooSlow1": { "helpPageTooSlow1": {
"message": "利用可能なホットキーがあります。セミコロンキーを押してスポンサーセグメントの開始/終了を示し、アポストロフィキーを押して送信します。これらはオプションで変更できます。QWERTYを使わない場合は、キーバインドを変更したほうがいいでしょう。" "message": "ショートカットキーが利用可能です。セミコロンキーでスポンサーセグメントを開始/終了し、アポストロフィキーで送信できます。またこれらはオプションで変更できます。QWERTYキーを使わない場合は、キー割り当てを変更したほうがいいでしょう。"
}, },
"helpPageCopyOfDatabase": { "helpPageCopyOfDatabase": {
"message": "データベースのコピーを取得できますか? あなたがいなくなった場合はどうなりますか?" "message": "データベースのコピーを利用できますか? 作者が失踪した場合はどうなりますか?"
}, },
"helpPageCopyOfDatabase1": { "helpPageCopyOfDatabase1": {
"message": "データベースは公開されており、こちらから閲覧できます:" "message": "データベースは公開されており、こちらから利用できます:"
}, },
"helpPageCopyOfDatabase2": { "helpPageCopyOfDatabase2": {
"message": "ソースコードは自由に利用できます。運営になにがあろうとも,あなたの貢献(提出された区域)が失われることはありません。" "message": "ソースコードは自由に利用できます。運営になにがあろうとも,あなたの貢献(提出された区域)が失われることはありません。"
@ -865,19 +865,19 @@
"message": "さらに詳しく" "message": "さらに詳しく"
}, },
"CopyDownvoteButtonInfo": { "CopyDownvoteButtonInfo": {
"message": "反対票を投じ、再提出するためにローカルコピーを作成します。" "message": "低評価を押し、再提出するためのローカルコピーを作成"
}, },
"OpenCategoryWikiPage": { "OpenCategoryWikiPage": {
"message": "このカテゴリーのWikiページを開きます。" "message": "このカテゴリーのWikiページを開きます。"
}, },
"CopyAndDownvote": { "CopyAndDownvote": {
"message": "コピーして反対票を投じる" "message": "コピーして低評価"
}, },
"ContinueVoting": { "ContinueVoting": {
"message": "投票を続ける" "message": "投票を続ける"
}, },
"ChangeCategoryTooltip": { "ChangeCategoryTooltip": {
"message": "この変更は即座にあなたのセグメントに適用されます" "message": "この変更はすぐにあなたのセグメントに適用されます"
}, },
"SponsorTimeEditScrollNewFeature": { "SponsorTimeEditScrollNewFeature": {
"message": "編集ボックスにカーソルを合わせながらマウスホイールを使用すると、時間をすばやく調整できます。 CtrlキーまたはShiftキーの組み合わせを使用して変更を微調整できます。" "message": "編集ボックスにカーソルを合わせながらマウスホイールを使用すると、時間をすばやく調整できます。 CtrlキーまたはShiftキーの組み合わせを使用して変更を微調整できます。"
@ -886,11 +886,11 @@
"message": "新機能!動画全体がスポンサー付きもしくはセルフプロモーションかがわかります" "message": "新機能!動画全体がスポンサー付きもしくはセルフプロモーションかがわかります"
}, },
"dayAbbreviation": { "dayAbbreviation": {
"message": "d", "message": "",
"description": "100d" "description": "100d"
}, },
"hourAbbreviation": { "hourAbbreviation": {
"message": "h", "message": "時間",
"description": "100h" "description": "100h"
}, },
"optionsTabBehavior": { "optionsTabBehavior": {
@ -898,7 +898,7 @@
"description": "Appears in Options as a tab header for options related to categories and skipping behavior. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)." "description": "Appears in Options as a tab header for options related to categories and skipping behavior. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
}, },
"optionsTabInterface": { "optionsTabInterface": {
"message": "UI", "message": "表示設定",
"description": "Appears in Options as a tab header for options related to GUI and sounds. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)." "description": "Appears in Options as a tab header for options related to GUI and sounds. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
}, },
"optionsTabKeyBinds": { "optionsTabKeyBinds": {
@ -914,7 +914,7 @@
"description": "Appears in Options as a tab header for advanced/niche options. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)." "description": "Appears in Options as a tab header for advanced/niche options. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
}, },
"noticeVisibilityLabel": { "noticeVisibilityLabel": {
"message": "スキップ通知の外観", "message": "スキップ通知の形式",
"description": "Option label" "description": "Option label"
}, },
"unbind": { "unbind": {

View file

@ -162,7 +162,7 @@
"message": "Ustaw nazwę użytkownika" "message": "Ustaw nazwę użytkownika"
}, },
"copyPublicID": { "copyPublicID": {
"message": "Kopiuj Publiczne ID Użytkownika" "message": "Kopiuj publiczny identyfikator użytkownika"
}, },
"discordAdvert": { "discordAdvert": {
"message": "Dołącz do oficjalnego serwera na discordzie i podziel się wrażeniami i sugestiami!" "message": "Dołącz do oficjalnego serwera na discordzie i podziel się wrażeniami i sugestiami!"
@ -183,7 +183,7 @@
"message": "Ta opcja ukrywa przyciski do zamieszczania segmentów pojawiające się na odtwarzaczu YouTube." "message": "Ta opcja ukrywa przyciski do zamieszczania segmentów pojawiające się na odtwarzaczu YouTube."
}, },
"showSkipButton": { "showSkipButton": {
"message": "Kontynuuj wyświetlanie przycisku pomijania" "message": "Wyświetlaj przycisk \"Przejść do wyróżnione?\" na odtwarzaczu"
}, },
"showInfoButton": { "showInfoButton": {
"message": "Pokaż przycisk informacyjny na odtwarzaczu YouTube" "message": "Pokaż przycisk informacyjny na odtwarzaczu YouTube"
@ -209,6 +209,15 @@
"enableViewTrackingInPrivate": { "enableViewTrackingInPrivate": {
"message": "Włącz licznik śledzenia pominięć w zakładkach Prywatnych/Incognito" "message": "Włącz licznik śledzenia pominięć w zakładkach Prywatnych/Incognito"
}, },
"enableTrackDownvotes": {
"message": "Zapamiętaj segmenty z łapkami w dół"
},
"whatTrackDownvotes": {
"message": "Wszystkie segmenty, którym dasz łapkę w dół, pozostaną ukryte nawet po odświeżeniu"
},
"trackDownvotesWarning": {
"message": "Uwaga: Wyłączenie tego usunie wszystkie poprzednio zapisane łapki w dół"
},
"enableQueryByHashPrefix": { "enableQueryByHashPrefix": {
"message": "Zapytanie według prefiksu Hash" "message": "Zapytanie według prefiksu Hash"
}, },
@ -780,6 +789,9 @@
"Donate": { "Donate": {
"message": "Dotacje" "message": "Dotacje"
}, },
"considerDonating": {
"message": "Wesprzyj"
},
"hideDonationLink": { "hideDonationLink": {
"message": "Ukryj Link Do Dotacji" "message": "Ukryj Link Do Dotacji"
}, },
@ -847,13 +859,13 @@
"message": "Dowiedz się więcej" "message": "Dowiedz się więcej"
}, },
"CopyDownvoteButtonInfo": { "CopyDownvoteButtonInfo": {
"message": "Minusuje i tworzy lokalną kopię, abyś mógł przesłać poprawioną wersję" "message": "Daje łapkę w dół i tworzy lokalną kopię, abyś mógł przesłać poprawioną wersję"
}, },
"OpenCategoryWikiPage": { "OpenCategoryWikiPage": {
"message": "Otwórz stronę wiki dla tej kategorii." "message": "Otwórz stronę wiki dla tej kategorii."
}, },
"CopyAndDownvote": { "CopyAndDownvote": {
"message": "Skopiuj i zminusuj" "message": "Skopiuj i daj łapkę w dół"
}, },
"ContinueVoting": { "ContinueVoting": {
"message": "Kontynuuj głosowanie" "message": "Kontynuuj głosowanie"

View file

@ -209,6 +209,15 @@
"enableViewTrackingInPrivate": { "enableViewTrackingInPrivate": {
"message": "Ativar Pular Contagem de Rastreamento em Abas Privadas/Incógnito" "message": "Ativar Pular Contagem de Rastreamento em Abas Privadas/Incógnito"
}, },
"enableTrackDownvotes": {
"message": "Armazenar votos negativos de segmentos"
},
"whatTrackDownvotes": {
"message": "Qualquer segmento que você der voto negative permanecerá oculto mesmo após recarregar"
},
"trackDownvotesWarning": {
"message": "Aviso: Desativar isto excluirá todos os votos negativos armazenados anteriormente"
},
"enableQueryByHashPrefix": { "enableQueryByHashPrefix": {
"message": "Consulta Por Prefixo Hash" "message": "Consulta Por Prefixo Hash"
}, },
@ -582,6 +591,9 @@
"category_preview_description": { "category_preview_description": {
"message": "Recapitulação rápida de episódios anteriores, ou uma prévia do que está chegando mais tarde no vídeo atual. Destinado a clipes editados juntos, não para resumos falados." "message": "Recapitulação rápida de episódios anteriores, ou uma prévia do que está chegando mais tarde no vídeo atual. Destinado a clipes editados juntos, não para resumos falados."
}, },
"category_filler": {
"message": "Enrolação/Piadas"
},
"category_filler_description": { "category_filler_description": {
"message": "Cenas tangenciais inseridas apenas por enrolação ou humor que não são necessárias para compreender o tópico principal do vídeo. Isto não deve incluir segmentos que fornecem contexto ou detalhes de segundo plano." "message": "Cenas tangenciais inseridas apenas por enrolação ou humor que não são necessárias para compreender o tópico principal do vídeo. Isto não deve incluir segmentos que fornecem contexto ou detalhes de segundo plano."
}, },
@ -694,6 +706,9 @@
"hiddenDueToDuration": { "hiddenDueToDuration": {
"message": "oculto: muito curto" "message": "oculto: muito curto"
}, },
"manuallyHidden": {
"message": "oculto manualmente"
},
"channelDataNotFound": { "channelDataNotFound": {
"description": "This error appears in an alert when they try to whitelist a channel and the extension is unable to determine what channel they are looking at.", "description": "This error appears in an alert when they try to whitelist a channel and the extension is unable to determine what channel they are looking at.",
"message": "O ID do canal ainda não foi carregado. Se você estiver usando um vídeo embutido, tente usar a página inicial do YouTube. Isso também pode ser causado por mudanças no layout do YouTube, se você achar que este é o caso, faça um comentário aqui:" "message": "O ID do canal ainda não foi carregado. Se você estiver usando um vídeo embutido, tente usar a página inicial do YouTube. Isso também pode ser causado por mudanças no layout do YouTube, se você achar que este é o caso, faça um comentário aqui:"
@ -780,6 +795,9 @@
"Donate": { "Donate": {
"message": "Doar" "message": "Doar"
}, },
"considerDonating": {
"message": "Ajude a financiar o desenvolvimento"
},
"hideDonationLink": { "hideDonationLink": {
"message": "Ocultar o Link de Doação" "message": "Ocultar o Link de Doação"
}, },

View file

@ -3,6 +3,10 @@
"message": "SponsorBlock para o YouTube - Salte patrocínios", "message": "SponsorBlock para o YouTube - Salte patrocínios",
"description": "Name of the extension." "description": "Name of the extension."
}, },
"Description": {
"message": "Salte patrocinios, pedidos de subscrição e mais em videos do YouTube. Submeta anúncios nos videos que visualiza para poupar tempo a outros.",
"description": "Description of the extension."
},
"400": { "400": {
"message": "O servidor disse que este pedido foi inválido" "message": "O servidor disse que este pedido foi inválido"
}, },
@ -15,9 +19,21 @@
"channelWhitelisted": { "channelWhitelisted": {
"message": "Canal adicionado à whitelist!" "message": "Canal adicionado à whitelist!"
}, },
"Segment": {
"message": "segmento"
},
"Segments": {
"message": "segmentos"
},
"upvoteButtonInfo": {
"message": "Votar positivamente esta submissão"
},
"reportButtonTitle": { "reportButtonTitle": {
"message": "Reportar" "message": "Reportar"
}, },
"reportButtonInfo": {
"message": "Reportar esta submissão como incorrecta."
},
"Dismiss": { "Dismiss": {
"message": "Ignorar" "message": "Ignorar"
}, },
@ -36,9 +52,15 @@
"reskip": { "reskip": {
"message": "Saltar novamente" "message": "Saltar novamente"
}, },
"unmute": {
"message": "Ativar som"
},
"paused": { "paused": {
"message": "Pausado" "message": "Pausado"
}, },
"manualPaused": {
"message": "Temporizador parado"
},
"confirmMSG": { "confirmMSG": {
"message": "\n\nPara editar ou remover linhas individuais, carregue com o botão direito ou abra o popup da extensão pelo icone no canto superior direito." "message": "\n\nPara editar ou remover linhas individuais, carregue com o botão direito ou abra o popup da extensão pelo icone no canto superior direito."
}, },
@ -48,18 +70,51 @@
"Unknown": { "Unknown": {
"message": "Erro ao enviar os seus segmentos, tente novamente mais tarde." "message": "Erro ao enviar os seus segmentos, tente novamente mais tarde."
}, },
"sponsorFound": {
"message": "Este vídeo tem segmentos na base de dados!"
},
"sponsor404": {
"message": "Nenhum segmento encontrado"
},
"sponsorStart": {
"message": "O Segmento Começa Agora"
},
"sponsorEnd": {
"message": "O Segmento Acaba Agora"
},
"sponsorCancel": {
"message": "Cancelar Criação de Segmento"
},
"noVideoID": {
"message": "Nenhum vídeo do YouTube encontrado.\nSe isto não estiver correto, atualize o separador."
},
"refreshSegments": {
"message": "Atualizar segmentos"
},
"success": { "success": {
"message": "Sucesso!" "message": "Sucesso!"
}, },
"voted": { "voted": {
"message": "Votado!" "message": "Votado!"
}, },
"serverDown": {
"message": "Parece que o servidor está em baixo. Contacte o desenvolvedor imediatamente."
},
"connectionError": { "connectionError": {
"message": "Deu-se um erro de conecção: Código: " "message": "Deu-se um erro de conecção: Código: "
}, },
"clearTimes": {
"message": "Limpar Segmentos"
},
"openPopup": { "openPopup": {
"message": "Abrir o Popup SponsorBlock" "message": "Abrir o Popup SponsorBlock"
}, },
"closePopup": {
"message": "Fechar Popup"
},
"SubmitTimes": {
"message": "Submeter Segmentos"
},
"submitCheck": { "submitCheck": {
"message": "Tem a certeza que pretende submeter?" "message": "Tem a certeza que pretende submeter?"
}, },

View file

@ -209,6 +209,15 @@
"enableViewTrackingInPrivate": { "enableViewTrackingInPrivate": {
"message": "Özel/Gizli sekmelerde atlama sayısı takibini etkinleştir" "message": "Özel/Gizli sekmelerde atlama sayısı takibini etkinleştir"
}, },
"enableTrackDownvotes": {
"message": "Kısımların olumsuz oylarını depola"
},
"whatTrackDownvotes": {
"message": "Olumsuz oy verdiğiniz kısımlar, sayfayı tazeledikten sonra da gizli kalacaktır"
},
"trackDownvotesWarning": {
"message": "Uyarı: Bu ayarı devre dışı bırakırsanız, halihazırda saklanan olumsuz oylar silinecek"
},
"enableQueryByHashPrefix": { "enableQueryByHashPrefix": {
"message": "Karma Ön eki ile Sorgula" "message": "Karma Ön eki ile Sorgula"
}, },
@ -582,6 +591,9 @@
"category_preview_description": { "category_preview_description": {
"message": "Önceki bölümlerin bir özeti veya geçerli videonun içeriğine yönelik bir ön izleme. Bu özellik birleştirilmiş klipler içindir, konuşarak anlatılan özetleri kapsamaz." "message": "Önceki bölümlerin bir özeti veya geçerli videonun içeriğine yönelik bir ön izleme. Bu özellik birleştirilmiş klipler içindir, konuşarak anlatılan özetleri kapsamaz."
}, },
"category_filler": {
"message": "Konuyla Alakasız / Şaka"
},
"category_filler_description": { "category_filler_description": {
"message": "Videonun ana içeriğini anlamak için gerekli olmayan, yalnızca alakasız konu veya mizah için eklenen sahneler. Bu, alakalı veya arka plan ayrıntısı veren kısımları içermemelidir." "message": "Videonun ana içeriğini anlamak için gerekli olmayan, yalnızca alakasız konu veya mizah için eklenen sahneler. Bu, alakalı veya arka plan ayrıntısı veren kısımları içermemelidir."
}, },

View file

@ -263,9 +263,15 @@
"skip": { "skip": {
"message": "略過" "message": "略過"
}, },
"mute": {
"message": "靜音"
},
"skip_category": { "skip_category": {
"message": "跳過 {0}" "message": "跳過 {0}"
}, },
"mute_category": {
"message": "要靜音 {0} 嗎?"
},
"muted": { "muted": {
"message": "{0} 已靜音", "message": "{0} 已靜音",
"description": "Example: Sponsor Muted" "description": "Example: Sponsor Muted"
@ -641,6 +647,9 @@
"hideForever": { "hideForever": {
"message": "永久隱藏" "message": "永久隱藏"
}, },
"helpPageThanksForInstalling": {
"message": "感謝你安裝 SponsorBlock。"
},
"Submitting": { "Submitting": {
"message": "正在提交" "message": "正在提交"
}, },
@ -652,5 +661,17 @@
}, },
"LearnMore": { "LearnMore": {
"message": "了解更多" "message": "了解更多"
},
"optionsTabInterface": {
"message": "介面",
"description": "Appears in Options as a tab header for options related to GUI and sounds. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabKeyBinds": {
"message": "鍵盤快捷鍵",
"description": "Appears in Options as a tab header for keybinds. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabAdvanced": {
"message": "其他",
"description": "Appears in Options as a tab header for advanced/niche options. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
} }
} }

View file

@ -593,7 +593,7 @@ svg {
/* Top bar navigation for smaller screens */ /* Top bar navigation for smaller screens */
@media only screen and (max-height: 650px), only screen and (max-width: 1200px) { @media only screen and (max-height: 725px), only screen and (max-width: 1200px) {
#options-container { #options-container {
flex-direction: column; flex-direction: column;
} }
@ -666,6 +666,8 @@ svg {
@media only screen and (max-width: 800px) { @media only screen and (max-width: 800px) {
#options { #options {
padding: 0 15px; padding: 0 15px;
justify-content: left; }
#options > div {
max-width: 100%;
} }
} }

View file

@ -1,235 +1,263 @@
:root { :root {
--sb-main-font-family: "Source Sans Pro", sans-serif;
--sb-main-bg-color: #222626; --sb-main-bg-color: #222626;
--sb-main-fg-color: white; --sb-main-fg-color: #fff;
--sb-gray-fg-color: #444848; --sb-grey-bg-color: #333;
--sb-on-white-bg: black; --sb-red-bg-color: #cc1717;
--sb-green-bg: #077B27; }
/*
* IDs on container element (when inserted in page), <html> element,
* <body> element and main container
*/
#sponsorBlockPopupContainer {
margin-bottom: 16px;
} }
#sponsorBlockPopupHTML { #sponsorBlockPopupHTML {
color-scheme: dark; color-scheme: dark;
} }
#sponsorBlockPopupBody .hidden { #sponsorBlockPopupBody {
display: none !important; margin: 0;
width: 374px;
font-family: var(--sb-main-font-family);
font-size: 14px;
background-color: var(--sb-main-bg-color);
color: var(--sb-main-fg-color);
color-scheme: dark;
} }
#sponsorblockPopup {
text-align: center;
}
/*
* Disable transition on all elements until the extension has loaded
*/
.sb-preload * {
transition: none !important;
}
/*
* Header logo
*/
.sbPopupLogo {
display: flex;
align-items: center;
font-size: 32px;
font-weight: bold;
justify-content: center;
user-select: none;
padding: 20px 0 10px;
}
.sbPopupLogo img {
margin-right: 8px;
}
/*
* Refresh segments button
*/
#refreshSegmentsButton {
background: transparent;
border: 0;
border-radius: 50%;
cursor: pointer;
display: flex;
padding: 5px;
margin: 5px auto;
align-items: center;
}
#refreshSegmentsButton:hover {
background-color: var(--sb-grey-bg-color);
}
/*
* <details> wrapper around each segment
*/
.votingButtons[open] {
padding-bottom: 5px;
}
.votingButtons:hover {
background-color: var(--sb-grey-bg-color);
}
/*
* Individual segments summaries (clickable <summary>)
*/
.segmentSummary {
cursor: pointer;
font-weight: bold;
padding: 7px;
list-style: none;
white-space: nowrap;
}
/*
* Category dot in segment
*/
.sponsorTimesCategoryColorCircle { .sponsorTimesCategoryColorCircle {
margin: 0 8px; margin: 0 8px;
} }
.voteButtonsContainer--hide {
display: none;
}
@media only screen and (max-width: 600px) {
#sponsorBlockPopupBody {
width: 100%;
}
}
#sponsorBlockPopupBody {
margin: auto;
width: 374px;
background: var(--sb-main-bg-color);
color-scheme: dark;
}
#sponsorblockPopup {
color: var(--sb-main-fg-color);
font-family: 'Source Sans Pro', sans-serif;
font-size: 14px;
display: flex;
flex-flow: column nowrap;
align-items: center;
width: 330px;
padding: 22px;
text-align: center;
margin-bottom: var(--ytd-margin-6x);
}
#issueReporterTimeButtons > .votingButtons > .segmentTimeButton {
font-weight: bold;
color: var(--sb-main-fg-color);
background: none;
border: none;
padding: 7px;
outline: none;
cursor: pointer;
white-space: nowrap;
}
.dot { .dot {
height: 10px;
width: 10px; width: 10px;
height: 10px;
border-radius: 50%; border-radius: 50%;
display: inline-block; display: inline-block;
} }
/*
* Buttons that appear under a segment on click
*/
.voteButton {
height: 20px;
padding: 0 5px;
cursor: pointer;
}
/*
* "Voted!" text that appears after voting on a segment
*/
.sponsorTimesThanksForVotingText { .sponsorTimesThanksForVotingText {
font-size: large; font-size: large;
} }
.voteButton { /*
height: 20px; * Main controls menu
padding: 0 5px; */
.sbControlsMenu {
background-color: var(--sb-grey-bg-color);
display: flex;
justify-content: space-evenly;
margin-top: 10px;
}
.sbControlsMenu-item {
background-color: var(--sb-grey-bg-color);
border: 0;
padding: 0;
cursor: pointer; cursor: pointer;
} user-select: none;
padding: 10px 15px;
#videoInfo>p, #videoInfo>div>p { flex: 1;
margin: 0;
}
div.logoText {
display: flex; display: flex;
flex-flow: row nowrap; flex-direction: column;
align-items: center; align-items: center;
color: var(--sb-main-fg-color); justify-content: center;
} }
div.logoText>p, .sbHeader { .sbControlsMenu-item:hover {
font-size: 32px; background-color: #444;
margin: -4px 0 -2px;
font-weight: bold;
} }
.sbHeader.sbSubHeader { .sbControlsMenu-itemIcon {
font-size: 20px; margin-bottom: 6px;
} }
.largeButton{ /*
background: white; * "Skipping is enabled" toggle
/*font-weight: bold;*/ */
padding: 6px 24px;
font-size: 20px;
border-radius: 25px;
border: none;
text-decoration: none;
color: black;
min-height: 26px;
min-width: 152px;
display: block;
overflow: hidden;
text-overflow: ellipsis;
font-family: 'Source Sans Pro', sans-serif;
}
.sponsorBlockPageBody .mediumButton {
background-color:#cc1717;
-moz-border-radius:28px;
-webkit-border-radius:28px;
border-radius:28px;
border: none;
display:inline-block;
cursor:pointer;
color:#ffffff;
font-size:16px;
padding:8px 37px;
text-decoration:none;
text-shadow:0px 0px 0px #662727;
font-family: 'Source Sans Pro', sans-serif;
transition: 0.01s background-color;
}
.sponsorBlockPageBody .mediumButton:hover {
background-color:#ec1c1c;
}
.sponsorBlockPageBody .mediumButton:focus {
outline: none;
background-color:#ec1c1c;
}
.sponsorBlockPageBody .mediumButton:active {
position:relative;
top:1px;
}
/* disable extension */
#disableExtension {
display: flex;
flex-flow: column nowrap;
align-items: center;
}
/* switch button */
.toggleSwitchContainer { .toggleSwitchContainer {
display: flex;
cursor: pointer; cursor: pointer;
display: flex;
flex-direction: column;
align-items: center;
}
.toggleSwitchContainer-switch {
display: flex;
margin-bottom: 6px;
} }
.switchBg { .switchBg {
display: block; display: block;
height: 37px; width: 50px;
width: 78px; height: 23px;
border-radius: 18.5px; border-radius: 18.5px;
} }
.switchBg.shadow { .switchBg.shadow {
background: none;
box-shadow: 0.75px 0.75px 10px 0px rgba(50, 50, 50, 0.5); box-shadow: 0.75px 0.75px 10px 0px rgba(50, 50, 50, 0.5);
opacity: 1; opacity: 1;
} }
.switchBg.white { .switchBg.white {
position: absolute; position: absolute;
background: white; background-color: #ccc;
opacity: 1; opacity: 1;
} }
.switchBg.green { .switchBg.green {
position: absolute; position: absolute;
background: #00a205; background-color: #00a205;
opacity: 0; opacity: 0;
transition: opacity .2s ease-out; transition: opacity 0.2s ease-out;
} }
.switchDot { .switchDot {
width: 25px; background-color: var(--sb-main-fg-color);
height: 25px; border-radius: 50%;
margin: 6px; width: 15px;
background: white; height: 15px;
margin: 4px;
position: absolute; position: absolute;
border-radius: 12.5px; box-shadow: 0.75px 0.75px 3.8px 0px rgba(50, 50, 50, 0.45);
box-shadow: .75px .75px 3.8px 0px rgba(50, 50, 50, 0.45); transition: transform 0.2s ease-out;
transition: transform .2s ease-out;
} }
.preload * { #toggleSwitch:checked ~ .switchDot {
transition: none !important; transform: translateX(27px);
} }
#toggleSwitch:checked~.switchDot { #toggleSwitch:checked ~ .switchBg.green {
transform: translateX(40px); opacity: 1;
} }
#toggleSwitch:checked~.switchBg.green { #toggleSwitch:checked ~ .switchBg.white {
opacity: 1 !important; opacity: 0;
transition: opacity 0.2s step-end;
} }
#toggleSwitch:checked~.switchBg.white { /*
opacity: 0 !important; * Whitelist add/remove icon
transition: opacity .2s step-end; */
.SBWhitelistIcon > path {
fill: var(--sb-main-fg-color);
} }
.sidebyside { .SBWhitelistIcon.rotated {
display: flex; transform: rotate(45deg);
flex-flow: row nowrap;
width: 88%;
margin: 0 6% 0 6%;
} }
.sidebyside>div { @keyframes rotate {
width: 50%; from {
justify-content: center; transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
} }
#whitelistButton, #sponsorTimesSkipsDoneContainer, .toggleSwitchContainer { /*
margin-bottom: 2px !important; * Notice that appears when whitelisting a channel, that recommends
} * enabling the "Force Channel Check Before Skipping" option
*/
#whitelistForceCheck { #whitelistForceCheck {
font-weight: bold; font-weight: bold;
@ -239,175 +267,247 @@ background-color:#ec1c1c;
padding: 10px 0; padding: 10px 0;
} }
.sbHeader { /*
margin-bottom: 5px !important; * Container around the "Segment Starts Now" and "Submit Times" buttons
} */
.logoText { #mainControls {
margin-bottom: 6px !important;
}
#videoInfo, #mainControls, .sidebyside, #sponsorTimesSkipsDoneContainer, .largeButton {
margin-bottom: 12px !important;
}
#mainControls{
flex-flow: column; flex-flow: column;
align-items: center; align-items: center;
} margin-bottom: 12px;
#submitTimesContainer{
flex-flow: column;
align-items: center;
}
/* additional buttons */
#additionalButtons {
display: flex;
flex-flow: column nowrap;
align-items: center;
} }
.sbSlimButton, #additionalButtons>button, button#setUsernameButton, #submitUsername, #copyUserID { /*
background: none; * Generic buttons used for "Segment Starts Now" and "Submit Times"
border: none; */
color: white;
width: fit-content;
padding-left: 0;
.sbMediumButton {
background-color: var(--sb-red-bg-color);
border: 0;
-moz-border-radius: 28px;
-webkit-border-radius: 28px;
border-radius: 28px;
display: inline-block;
cursor: pointer; cursor: pointer;
color: var(--sb-main-fg-color);
font-size: 16px;
padding: 8px 37px;
font-family: var(--sb-main-font-family);
transition: 0.01s background-color;
} }
button#setUsernameButton { .sbMediumButton:hover,
flex: 0 1; .sbMediumButton:focus {
outline: none;
background-color: #ec1c1c;
} }
.sbMediumButton:active {
position: relative;
top: 1px;
}
/*
* "Submit Times" button
*/
#submitTimes {
margin-top: 12px;
}
/*
* Heading utility class
*/
.sbHeader {
font-size: 20px;
font-weight: bold;
margin: 10px 0 5px;
}
/*
* Side-by-side section of "Your Work"
*/
.sbYourWorkCols {
display: flex;
margin: 0 20px 12px;
}
.sbYourWorkCols > div {
display: flex;
align-items: center;
width: 50%;
justify-content: center;
}
/*
* <button> elements that have icons
*/
#setUsernameButton,
#submitUsername,
#copyUserID {
background: transparent;
border: 0;
cursor: pointer;
padding: 0;
color: var(--sb-main-fg-color);
width: fit-content;
}
/*
* Prevent username from wrapping
*/
#setUsernameButton {
flex: 0 1;
margin-right: 5px;
}
/*
* Set username button
*/
#submitUsername { #submitUsername {
padding-left: 5pt; padding-left: 7px;
} }
#additionalButtons, #additionalButtons>button { /*
font-size: 15px; * Increase font size of username input and display
} */
#usernameValue, #usernameInput, #sponsorTimesContributionsDisplay{ #usernameValue,
#usernameInput,
#sponsorTimesContributionsDisplay {
font-size: 16px; font-size: 16px;
flex: 1 0; flex: 1 0;
} }
.SBWhitelistIcon { /*
min-width: 16px; * Left align "Username" and "Submissions" labels
min-height: 16px; */
margin-top: auto;
margin-bottom: auto;
}
.SBWhitelistIcon>path { #usernameElement > div > p,
fill: var(--sb-main-fg-color); #sponsorTimesContributionsContainer {
}
label>p, #disableExtension>p, #usernameValue, #usernameElement > div > p,#sponsorTimesContributionsContainer > div > p, #usernameElement > div > #setUsername > #setUsernameStatusContainer > p {
margin: 0;
}
#usernameElement > div > p, #sponsorTimesContributionsContainer {
text-align: start; text-align: start;
} }
.grayedOut>.SBWhitelistIcon>path { /*
fill: var(--sb-gray-fg-color); * Enable flexbox for buttons with SVG icon
} */
.grayedOut>label { #setUsernameContainer > button {
color: var(--sb-gray-fg-color);
}
.SBWhitelistIcon.rotated {
transform: rotate(45deg);
}
@keyframes rotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.SBWhitelistIconContainer, button#optionsButton {
display: flex; display: flex;
align-items: center;
} }
.SBWhitelistIconContainer, button#optionsButton>img, .logoText>img, #usernameValue { /*
margin-right: 8px; * Improve position of "Copy User ID" button
} */
#whitelistButton>label, #additionalButtons>button, div#setUsernameContainer>button {
display: flex;
flex-flow: row nowrap;
}
.sbSlimButton, #whitelistButton>label, #additionalButtons>button, div#setUsernameContainer>button {
cursor: pointer;
}
#copyUserID { #copyUserID {
width: 100%; width: 100%;
flex: 0 1; flex: 0 1;
} }
/*
* Container around username display and edit
*/
#setUsernameContainer { #setUsernameContainer {
display: flex; display: flex;
} }
#usernameElement > div, #sponsorTimesContributionsContainer > div { /*
* Improve alignment of username and submissions
*/
#usernameElement > div,
#sponsorTimesContributionsContainer > div {
display: flex; display: flex;
flex-flow: column nowrap; flex-flow: column nowrap;
align-items: flex-start; align-items: flex-start;
} }
.sidebyside > #usernameElement, .sidebyside > #sponsorTimesContributionsContainer { /*
display: flex; * Truncate username display
align-items: center; */
}
#usernameValue{ #usernameValue {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
max-width: 130px; max-width: 130px;
margin-right: 8px;
} }
/*
* Set username form container with "expanded" state
*/
#setUsername { #setUsername {
display:flex; display: flex;
}
#usernameInput {
background: none;
padding: 0;
border: white 1px solid;
color: var(--sb-main-fg-color);
width: calc(100% - 24px);
text-overflow: ellipsis;
} }
#setUsername.SBExpanded { #setUsername.SBExpanded {
width: 200%; width: 200%;
} }
/* footer */ /*
* Set username input
*/
#usernameInput {
background: transparent;
padding: 2px;
border: var(--sb-main-fg-color) 1px solid;
color: var(--sb-main-fg-color);
width: calc(100% - 24px);
text-overflow: ellipsis;
}
/*
* Footer
*/
#sbFooter {
margin-top: 10px;
padding-bottom: 20px;
}
#sbFooter a { #sbFooter a {
color: var(--sb-main-fg-color); color: var(--sb-main-fg-color);
cursor: pointer;
text-decoration: none; text-decoration: none;
} }
/*
* "Show Notice Again" button
*/
#showNoticeAgain { #showNoticeAgain {
margin-top: 30px; background: transparent;
border: 1px solid #fff;
color: var(--sb-main-fg-color);
background: none;
border: 1px solid white;
cursor: pointer;
padding: 5px;
border-radius: 5px; border-radius: 5px;
color: var(--sb-main-fg-color);
cursor: pointer;
margin-bottom: 20px;
padding: 5px;
}
/*
* Generic spacing classes
*/
.u-mZ {
margin: 0 !important;
}
/*
* Generic hide utility classes
*/
#sponsorBlockPopupBody .hidden {
display: none !important;
} }
#issueReporterTabs { #issueReporterTabs {

View file

@ -1,28 +1,29 @@
<!DOCTYPE html>
<html id="sponsorBlockPopupHTML"> <html id="sponsorBlockPopupHTML">
<head> <head>
<meta charset="utf-8" />
<title>__MSG_openPopup__</title> <title>__MSG_openPopup__</title>
<link id="sponsorBlockPopupFont" rel="stylesheet" type="text/css" href="/libs/Source+Sans+Pro.css"> <meta name="viewport" content="width=device-width, initial-scale=1" />
<link id="sponsorBlockStyleSheet" rel="stylesheet" type="text/css" href="popup.css"> <link id="sponsorBlockPopupFont" href="/libs/Source+Sans+Pro.css" rel="stylesheet">
<link id="sponsorBlockStyleSheet" href="popup.css" rel="stylesheet">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head> </head>
<body id="sponsorBlockPopupBody"> <body id="sponsorBlockPopupBody">
<div id="sponsorblockPopup" class="sponsorBlockPageBody preload"> <div id="sponsorblockPopup" class="sponsorBlockPageBody sb-preload">
<div class="logoText bottomSpace">
<img src="icons/IconSponsorBlocker256px.png" height="40px" id="sponsorBlockPopupLogo"> <header class="sbPopupLogo">
<p>SponsorBlock</p> <img src="icons/IconSponsorBlocker256px.png" alt="SponsorBlock" width="40" height="40" id="sponsorBlockPopupLogo">
</div> <p class="u-mZ">SponsorBlock</p>
<div id="videoInfo" class="bottomSpace"> </header>
<div class="bottomSpace">
<!-- Loading text --> <div id="videoInfo">
<p id="loadingIndicator">__MSG_noVideoID__</p> <!-- Loading text -->
<!-- If the video was found in the database --> <p id="loadingIndicator" class="u-mZ">__MSG_noVideoID__</p>
<p id="videoFound"></p> <!-- If the video was found in the database -->
<button class="sbSlimButton" id="refreshSegmentsButton" title="__MSG_refreshSegments__"> <p id="videoFound" class="u-mZ"></p>
<img id="refreshSegments" src="/icons/refresh.svg"/> <button id="refreshSegmentsButton" title="__MSG_refreshSegments__">
</button> <img src="/icons/refresh.svg" alt="Refresh icon" id="refreshSegments" />
</div> </button>
<div id="issueReporterContainer"> <div id="issueReporterContainer">
<div id="issueReporterTabs" class="hidden"> <div id="issueReporterTabs" class="hidden">
<span id="issueReporterTabSegments" class="sbSelected"> <span id="issueReporterTabSegments" class="sbSelected">
@ -35,66 +36,59 @@
<div id="issueReporterTimeButtons"></div> <div id="issueReporterTimeButtons"></div>
</div> </div>
</div> </div>
<div class="sidebyside">
<div id="disableExtension"> <div class="sbControlsMenu">
<!--github: mbledkowski/toggle-switch--> <label id="whitelistButton" for="whitelistToggle" class="hidden sbControlsMenu-item" title="__MSG_forceChannelCheckPopup__">
<label for="toggleSwitch" class="toggleSwitchContainer"> <input type="checkbox" style="display:none;" id="whitelistToggle">
<svg viewBox="0 0 24 24" width="23" height="23" class="SBWhitelistIcon sbControlsMenu-itemIcon">
<path d="M24 10H14V0h-4v10H0v4h10v10h4V14h10z" />
</svg>
<span id="whitelistChannel">__MSG_whitelistChannel__</span>
<span id="unwhitelistChannel" style="display: none">__MSG_removeFromWhitelist__</span>
</label>
<!--github: mbledkowski/toggle-switch-->
<label id="disableExtension" for="toggleSwitch" class="toggleSwitchContainer sbControlsMenu-item">
<span class="toggleSwitchContainer-switch">
<input type="checkbox" style="display:none;" id="toggleSwitch" checked> <input type="checkbox" style="display:none;" id="toggleSwitch" checked>
<span class="switchBg shadow"></span> <span class="switchBg shadow"></span>
<span class="switchBg white"></span> <span class="switchBg white"></span>
<span class="switchBg green"></span> <span class="switchBg green"></span>
<span class="switchDot"></span> <span class="switchDot"></span>
</label> </span>
<p id="disableSkipping">__MSG_disableSkipping__</p> <span id="disableSkipping">__MSG_disableSkipping__</span>
<p id="enableSkipping" style="display: none">__MSG_enableSkipping__</p> <span id="enableSkipping" style="display: none">__MSG_enableSkipping__</span>
</div> </label>
<div id="additionalButtons"> <button id="optionsButton" class="sbControlsMenu-item" title="__MSG_optionsInfo__">
<!-- grayedOut until loading complete --> <img src="/icons/settings.svg" alt="Settings icon" width="23" height="23" class="sbControlsMenu-itemIcon" id="sbPopupIconSettings" />
<div id="whitelistButton" class="hidden bottomSpace" title="__MSG_forceChannelCheckPopup__"> __MSG_Options__
<input type="checkbox" style="display:none;" id="whitelistToggle"> </button>
<label for="whitelistToggle" class="whitelistToggleText">
<div class="SBWhitelistIconContainer">
<svg viewBox="0 0 24 24" width="16" height="16" class="SBWhitelistIcon">
<path d="M24 10H14V0h-4v10H0v4h10v10h4V14h10z" />
</svg>
</div>
<p id="whitelistChannel">__MSG_whitelistChannel__</p>
<p id="unwhitelistChannel" style="display: none">__MSG_removeFromWhitelist__</p>
</label>
</div>
<button id="optionsButton" title="__MSG_optionsInfo__">
<img src="/icons/settings.svg" alt="Settings icon" width="16" height="16" id="sbPopupIconSettings">
__MSG_Options__
</button>
</div>
</div> </div>
<div id="whitelistForceCheck" class="hidden"> <p id="whitelistForceCheck" class="u-mZ hidden">
__MSG_forceChannelCheckPopup__ __MSG_forceChannelCheckPopup__
</div> </p>
<div id="mainControls" style="display: none"> <div id="mainControls" style="display: none">
<p class="sbHeader sbSubHeader"> <p class="sbHeader">
__MSG_recordTimesDescription__ __MSG_recordTimesDescription__
</p> </p>
<sub style="margin-bottom: 12px;">__MSG_popupHint__</sub> <sub style="margin-bottom: 12px;">__MSG_popupHint__</sub>
<div> <div>
<button id="sponsorStart" class="mediumButton">__MSG_sponsorStart__</button> <button id="sponsorStart" class="sbMediumButton">__MSG_sponsorStart__</button>
</div> </div>
<div id="submissionSection" style="display: none"> <div id="submissionSection" style="display: none">
<b style="display: block; margin-top: 12px;">__MSG_submissionEditHint__</b> <b style="display: block; margin-top: 12px;">__MSG_submissionEditHint__</b>
<div id="submitTimesContainer" style="margin-top: 12px;"> <button id="submitTimes" class="sbMediumButton">__MSG_submitTimesButton__</button>
<button id="submitTimes" class="mediumButton">__MSG_submitTimesButton__</button>
</div>
</div> </div>
</div> </div>
<h1 class="recordingSubtitle sbHeader sbSubHeader">__MSG_yourWork__</h1>
<div class="sidebyside"> <h1 class="recordingSubtitle sbHeader">__MSG_yourWork__</h1>
<div class="sbYourWorkCols">
<div id="usernameElement"> <div id="usernameElement">
<div> <div>
<p>__MSG_Username__:</p> <p class="u-mZ">__MSG_Username__:</p>
<div id="setUsernameContainer"> <div id="setUsernameContainer">
<p id="usernameValue"></p> <p id="usernameValue" class="u-mZ"></p>
<button id="setUsernameButton" title="__MSG_setUsername__"> <button id="setUsernameButton" title="__MSG_setUsername__">
<img src="/icons/pencil.svg" alt="__MSG_setUsername__" width="16" height="16" id="sbPopupIconEdit"> <img src="/icons/pencil.svg" alt="__MSG_setUsername__" width="16" height="16" id="sbPopupIconEdit">
</button> </button>
@ -104,9 +98,9 @@
</div> </div>
<div id="setUsername" style="display: none"> <div id="setUsername" style="display: none">
<div id="setUsernameStatusContainer" style="display: none"> <div id="setUsernameStatusContainer" style="display: none">
<p id="setUsernameStatus"></p> <p id="setUsernameStatus" class="u-mZ"></p>
</div> </div>
<input id="usernameInput" hint="Username"></input> <input id="usernameInput" placeholder="Username">
<button id="submitUsername"> <button id="submitUsername">
<img src="/icons/check.svg" alt="__MSG_setUsername__" width="16" height="16" id="sbPopupIconCheck"> <img src="/icons/check.svg" alt="__MSG_setUsername__" width="16" height="16" id="sbPopupIconCheck">
</button> </button>
@ -115,7 +109,7 @@
</div> </div>
<div id="sponsorTimesContributionsContainer" class="hidden"> <div id="sponsorTimesContributionsContainer" class="hidden">
<div> <div>
<p>__MSG_Submissions__:</p> <p class="u-mZ">__MSG_Submissions__:</p>
<span id="sponsorTimesContributionsDisplay"> <span id="sponsorTimesContributionsDisplay">
0 0
</span> </span>
@ -123,7 +117,7 @@
</div> </div>
</div> </div>
<span id="sponsorTimesViewsContainer" style="display: none"> <p id="sponsorTimesViewsContainer" style="display: none" class="u-mZ">
__MSG_savedPeopleFrom__ __MSG_savedPeopleFrom__
<b><span id="sponsorTimesViewsDisplay"> <b><span id="sponsorTimesViewsDisplay">
0 0
@ -133,8 +127,8 @@
(<b><span id="sponsorTimesOthersTimeSavedDisplay">0</span> (<b><span id="sponsorTimesOthersTimeSavedDisplay">0</span>
<span id="sponsorTimesOthersTimeSavedEndWord">__MSG_minsLower__</span></b> <span id="sponsorTimesOthersTimeSavedEndWord">__MSG_minsLower__</span></b>
<span>__MSG_youHaveSavedTimeEnd__</span>). <span>__MSG_youHaveSavedTimeEnd__</span>).
</span> </p>
<div id="sponsorTimesSkipsDoneContainer" style="display: none"> <p id="sponsorTimesSkipsDoneContainer" style="display: none" class="u-mZ">
__MSG_youHaveSkipped__ __MSG_youHaveSkipped__
<b><span id="sponsorTimesSkipsDoneDisplay"> <b><span id="sponsorTimesSkipsDoneDisplay">
0 0
@ -144,14 +138,15 @@
0 0
</span> </span>
<span id="sponsorTimeSavedEndWord">__MSG_minsLower__</span></b>). <span id="sponsorTimeSavedEndWord">__MSG_minsLower__</span></b>).
</div> </p>
<footer id="sbFooter"> <footer id="sbFooter">
<div id="sponsorTimesDonateContainer" style="display: none; align-items: center; justify-content: center;"> <div id="sponsorTimesDonateContainer" style="display: none; align-items: center; justify-content: center;">
<img class="sbHeart" src="/icons/heart.svg"/> <img class="sbHeart" src="/icons/heart.svg" alt="Heart icon" />
<a id="sbConsiderDonateLink" href="https://sponsor.ajay.app/donate" target="_blank" rel="noopener"> <a id="sbConsiderDonateLink" href="https://sponsor.ajay.app/donate" target="_blank" rel="noopener">
__MSG_considerDonating__ __MSG_considerDonating__
</a> </a>
<img id="sbCloseDonate" src="/icons/close.png" height="8px" style="padding-left: 5px; cursor: pointer;"/> <img id="sbCloseDonate" src="/icons/close.png" alt="Close icon" height="8" style="padding-left: 5px; cursor: pointer;" />
</div> </div>
<a href="https://sponsor.ajay.app" target="_blank" rel="noopener">__MSG_website__</a> | <a href="https://sponsor.ajay.app" target="_blank" rel="noopener">__MSG_website__</a> |
@ -160,14 +155,15 @@
<br/> <br/>
<a href="https://discord.gg/SponsorBlock" target="_blank" rel="noopener">Discord</a> | <a href="https://discord.gg/SponsorBlock" target="_blank" rel="noopener">Discord</a> |
<a href="https://matrix.to/#/#sponsor:ajay.app?via=ajay.app&via=matrix.org&via=mozilla.org" target="_blank" rel="noopener">Matrix</a> | <a href="https://matrix.to/#/#sponsor:ajay.app?via=ajay.app&via=matrix.org&via=mozilla.org" target="_blank" rel="noopener">Matrix</a> |
<a id="helpButton" style="cursor: pointer;">__MSG_help__</a> | <a id="helpButton">__MSG_help__</a> |
<a href="https://sponsor.ajay.app/donate" target="_blank" rel="noopener" id="sbDonate">$</a> <a href="https://sponsor.ajay.app/donate" target="_blank" rel="noopener" id="sbDonate">$</a>
</footer> </footer>
<button id="showNoticeAgain" style="display: none" class="dangerButton popupElement">__MSG_showNotice__</button> <button id="showNoticeAgain" style="display: none">__MSG_showNotice__</button>
</div> </div>
<!-- Scripts that need to load after the html --> <!-- Scripts that need to load after the html -->
<script src="./js/vendor.js" async></script> <script src="./js/vendor.js" async></script>
<script src="./js/popup.js" async></script> <script src="./js/popup.js" async></script>
</body> </body>
</html> </html>

View file

@ -140,9 +140,6 @@ const manualSkipPercentCount = 0.5;
//get messages from the background script and the popup //get messages from the background script and the popup
chrome.runtime.onMessage.addListener(messageListener); chrome.runtime.onMessage.addListener(messageListener);
//store pressed modifier keys
const pressedKeys = new Set();
function messageListener(request: Message, sender: unknown, sendResponse: (response: MessageResponse) => void): void | boolean { function messageListener(request: Message, sender: unknown, sendResponse: (response: MessageResponse) => void): void | boolean {
//messages from popup script //messages from popup script
switch(request.message){ switch(request.message){
@ -911,7 +908,8 @@ function retryFetch(): void {
* Ex. When segments are first loaded * Ex. When segments are first loaded
*/ */
function startSkipScheduleCheckingForStartSponsors() { function startSkipScheduleCheckingForStartSponsors() {
if (!switchingVideos && sponsorTimes) { // switchingVideos is ignored in Safari due to event fire order. See #1142
if ((!switchingVideos || isSafari) && sponsorTimes) {
// See if there are any starting sponsors // See if there are any starting sponsors
let startingSegmentTime = getStartTimeFromUrl(document.URL) || -1; let startingSegmentTime = getStartTimeFromUrl(document.URL) || -1;
let found = false; let found = false;
@ -2028,37 +2026,34 @@ function addPageListeners(): void {
function addHotkeyListener(): void { function addHotkeyListener(): void {
document.addEventListener("keydown", hotkeyListener); document.addEventListener("keydown", hotkeyListener);
document.addEventListener("keyup", (e) => pressedKeys.delete(e.key));
document.addEventListener("focus", (e) => pressedKeys.clear());
} }
function hotkeyListener(e: KeyboardEvent): void { function hotkeyListener(e: KeyboardEvent): void {
if (["textarea", "input"].includes(document.activeElement?.tagName?.toLowerCase()) if (["textarea", "input"].includes(document.activeElement?.tagName?.toLowerCase())
|| document.activeElement?.id?.toLowerCase()?.includes("editable")) return; || document.activeElement?.id?.toLowerCase()?.includes("editable")) return;
if (["Alt", "Control", "Shift", "AltGraph"].includes(e.key)) { const key: Keybind = {
pressedKeys.add(e.key); key: e.key,
return; code: e.code,
} alt: e.altKey,
ctrl: e.ctrlKey,
const key:Keybind = {key: e.key, code: e.code, alt: pressedKeys.has("Alt"), ctrl: pressedKeys.has("Control"), shift: pressedKeys.has("Shift")}; shift: e.shiftKey
};
const skipKey = Config.config.skipKeybind; const skipKey = Config.config.skipKeybind;
const startSponsorKey = Config.config.startSponsorKeybind; const startSponsorKey = Config.config.startSponsorKeybind;
const submitKey = Config.config.submitKeybind; const submitKey = Config.config.submitKeybind;
if (!pressedKeys.has("AltGraph")) { if (keybindEquals(key, skipKey)) {
if (keybindEquals(key, skipKey)) { if (activeSkipKeybindElement)
if (activeSkipKeybindElement) activeSkipKeybindElement.toggleSkip.call(activeSkipKeybindElement);
activeSkipKeybindElement.toggleSkip.call(activeSkipKeybindElement); return;
return; } else if (keybindEquals(key, startSponsorKey)) {
} else if (keybindEquals(key, startSponsorKey)) { startOrEndTimingNewSegment();
startOrEndTimingNewSegment(); return;
return; } else if (keybindEquals(key, submitKey)) {
} else if (keybindEquals(key, submitKey)) { submitSponsorTimes();
submitSponsorTimes(); return;
return;
}
} }
//legacy - to preserve keybinds for skipKey, startSponsorKey and submitKey for people who set it before the update. (shouldn't be changed for future keybind options) //legacy - to preserve keybinds for skipKey, startSponsorKey and submitKey for people who set it before the update. (shouldn't be changed for future keybind options)

View file

@ -177,56 +177,40 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
PageElements.showNoticeAgain.style.display = "unset"; PageElements.showNoticeAgain.style.display = "unset";
} }
utils.sendRequestToServer("GET", "/api/getUsername?userID=" + Config.config.userID, (res) => { utils.sendRequestToServer("GET", "/api/userInfo?value=userName&value=viewCount&value=minutesSaved&userID=" + Config.config.userID, (res) => {
if (res.status === 200) { if (res.status === 200) {
PageElements.usernameValue.innerText = JSON.parse(res.responseText).userName const userInfo = JSON.parse(res.responseText);
PageElements.usernameValue.innerText = userInfo.userName;
const viewCount = userInfo.viewCount;
if (viewCount != 0) {
if (viewCount > 1) {
PageElements.sponsorTimesViewsDisplayEndWord.innerText = chrome.i18n.getMessage("Segments");
} else {
PageElements.sponsorTimesViewsDisplayEndWord.innerText = chrome.i18n.getMessage("Segment");
}
PageElements.sponsorTimesViewsDisplay.innerText = viewCount.toLocaleString();
PageElements.sponsorTimesViewsContainer.style.display = "unset";
}
showDonateWidget(viewCount);
const minutesSaved = userInfo.minutesSaved;
if (minutesSaved != 0) {
if (minutesSaved != 1) {
PageElements.sponsorTimesOthersTimeSavedEndWord.innerText = chrome.i18n.getMessage("minsLower");
} else {
PageElements.sponsorTimesOthersTimeSavedEndWord.innerText = chrome.i18n.getMessage("minLower");
}
PageElements.sponsorTimesOthersTimeSavedDisplay.innerText = getFormattedHours(minutesSaved);
}
} }
}) });
//get the amount of times this user has contributed and display it to thank them //get the amount of times this user has contributed and display it to thank them
if (Config.config.sponsorTimesContributed != undefined) { if (Config.config.sponsorTimesContributed != undefined) {
PageElements.sponsorTimesContributionsDisplay.innerText = Config.config.sponsorTimesContributed.toLocaleString(); PageElements.sponsorTimesContributionsDisplay.innerText = Config.config.sponsorTimesContributed.toLocaleString();
PageElements.sponsorTimesContributionsContainer.classList.remove("hidden"); PageElements.sponsorTimesContributionsContainer.classList.remove("hidden");
//get the userID
const userID = Config.config.userID;
if (userID != undefined) {
//there are probably some views on these submissions then
//get the amount of views from the sponsors submitted
utils.sendRequestToServer("GET", "/api/getViewsForUser?userID=" + userID, function (response) {
if (response.status == 200) {
const viewCount = JSON.parse(response.responseText).viewCount;
if (viewCount != 0) {
if (viewCount > 1) {
PageElements.sponsorTimesViewsDisplayEndWord.innerText = chrome.i18n.getMessage("Segments");
} else {
PageElements.sponsorTimesViewsDisplayEndWord.innerText = chrome.i18n.getMessage("Segment");
}
PageElements.sponsorTimesViewsDisplay.innerText = viewCount.toLocaleString();
PageElements.sponsorTimesViewsContainer.style.display = "unset";
}
showDonateWidget(viewCount);
}
});
//get this time in minutes
utils.sendRequestToServer("GET", "/api/getSavedTimeForUser?userID=" + userID, function (response) {
if (response.status == 200) {
const minutesSaved = JSON.parse(response.responseText).timeSaved;
if (minutesSaved != 0) {
if (minutesSaved != 1) {
PageElements.sponsorTimesOthersTimeSavedEndWord.innerText = chrome.i18n.getMessage("minsLower");
} else {
PageElements.sponsorTimesOthersTimeSavedEndWord.innerText = chrome.i18n.getMessage("minLower");
}
PageElements.sponsorTimesOthersTimeSavedDisplay.innerText = getFormattedHours(minutesSaved);
}
}
});
}
} }
//get the amount of times this user has skipped a sponsor //get the amount of times this user has skipped a sponsor
@ -280,7 +264,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
PageElements.sbConsiderDonateLink.addEventListener("click", () => { PageElements.sbConsiderDonateLink.addEventListener("click", () => {
Config.config.donateClicked = Config.config.donateClicked + 1; Config.config.donateClicked = Config.config.donateClicked + 1;
}); });
PageElements.sbCloseDonate.addEventListener("click", () => { PageElements.sbCloseDonate.addEventListener("click", () => {
PageElements.sponsorTimesDonateContainer.style.display = "none"; PageElements.sponsorTimesDonateContainer.style.display = "none";
Config.config.showPopupDonationCount = 100; Config.config.showPopupDonationCount = 100;
@ -455,8 +439,8 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
const category = segmentTimes[i].category; const category = segmentTimes[i].category;
const actionType = segmentTimes[i].actionType; const actionType = segmentTimes[i].actionType;
const sponsorTimeButton = document.createElement("button"); const segmentSummary = document.createElement("summary");
sponsorTimeButton.className = "segmentTimeButton popupElement"; segmentSummary.className = "segmentSummary";
const categoryColorCircle = document.createElement("span"); const categoryColorCircle = document.createElement("span");
categoryColorCircle.id = "sponsorTimesCategoryColorCircle" + UUID; categoryColorCircle.id = "sponsorTimesCategoryColorCircle" + UUID;
@ -483,24 +467,23 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
} else { } else {
segmentTimeFromToNode.innerText = GenericUtils.getFormattedTime(segmentTimes[i].segment[0], true) + segmentTimeFromToNode.innerText = GenericUtils.getFormattedTime(segmentTimes[i].segment[0], true) +
(actionType !== ActionType.Poi (actionType !== ActionType.Poi
? " " + chrome.i18n.getMessage("to") + " " + GenericUtils.getFormattedTime(segmentTimes[i].segment[1], true) ? " " + chrome.i18n.getMessage("to") + " " + GenericUtils.getFormattedTime(segmentTimes[i].segment[1], true)
: ""); : "");
} }
segmentTimeFromToNode.style.margin = "5px"; segmentTimeFromToNode.style.margin = "5px";
if (actionType !== ActionType.Chapter) sponsorTimeButton.appendChild(categoryColorCircle); if (actionType !== ActionType.Chapter) segmentSummary.appendChild(categoryColorCircle);
sponsorTimeButton.appendChild(textNode); segmentSummary.appendChild(textNode);
sponsorTimeButton.appendChild(segmentTimeFromToNode); segmentSummary.appendChild(segmentTimeFromToNode);
const votingButtons = document.createElement("div"); const votingButtons = document.createElement("details");
votingButtons.classList.add("votingButtons"); votingButtons.classList.add("votingButtons");
//thumbs up and down buttons //thumbs up and down buttons
const voteButtonsContainer = document.createElement("div"); const voteButtonsContainer = document.createElement("div");
voteButtonsContainer.id = "sponsorTimesVoteButtonsContainer" + UUID; voteButtonsContainer.id = "sponsorTimesVoteButtonsContainer" + UUID;
voteButtonsContainer.setAttribute("align", "center"); voteButtonsContainer.setAttribute("align", "center");
voteButtonsContainer.classList.add('voteButtonsContainer--hide');
const upvoteButton = document.createElement("img"); const upvoteButton = document.createElement("img");
upvoteButton.id = "sponsorTimesUpvoteButtonsContainer" + UUID; upvoteButton.id = "sponsorTimesUpvoteButtonsContainer" + UUID;
@ -570,18 +553,13 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
voteButtonsContainer.appendChild(upvoteButton); voteButtonsContainer.appendChild(upvoteButton);
voteButtonsContainer.appendChild(downvoteButton); voteButtonsContainer.appendChild(downvoteButton);
voteButtonsContainer.appendChild(uuidButton); voteButtonsContainer.appendChild(uuidButton);
if (segmentTimes[i].actionType === ActionType.Skip if (segmentTimes[i].actionType === ActionType.Skip
&& [SponsorHideType.Visible, SponsorHideType.Hidden].includes(segmentTimes[i].hidden)) { && [SponsorHideType.Visible, SponsorHideType.Hidden].includes(segmentTimes[i].hidden)) {
voteButtonsContainer.appendChild(hideButton); voteButtonsContainer.appendChild(hideButton);
} }
voteButtonsContainer.appendChild(skipButton); voteButtonsContainer.appendChild(skipButton);
//add click listener to open up vote panel
sponsorTimeButton.addEventListener("click", function () {
voteButtonsContainer.classList.toggle("voteButtonsContainer--hide");
});
// Will contain request status // Will contain request status
const voteStatusContainer = document.createElement("div"); const voteStatusContainer = document.createElement("div");
voteStatusContainer.id = "sponsorTimesVoteStatusContainer" + UUID; voteStatusContainer.id = "sponsorTimesVoteStatusContainer" + UUID;
@ -593,7 +571,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
thanksForVotingText.classList.add("sponsorTimesThanksForVotingText"); thanksForVotingText.classList.add("sponsorTimesThanksForVotingText");
voteStatusContainer.appendChild(thanksForVotingText); voteStatusContainer.appendChild(thanksForVotingText);
votingButtons.append(sponsorTimeButton); votingButtons.append(segmentSummary);
votingButtons.append(voteButtonsContainer); votingButtons.append(voteButtonsContainer);
votingButtons.append(voteStatusContainer); votingButtons.append(voteStatusContainer);
@ -901,8 +879,8 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
/** /**
* Converts time in minutes to 2d 5h 25.1 * Converts time in minutes to 2d 5h 25.1
* If less than 1 hour, just returns minutes * If less than 1 hour, just returns minutes
* *
* @param {float} minutes * @param {float} minutes
* @returns {string} * @returns {string}
*/ */
function getFormattedHours(minutes) { function getFormattedHours(minutes) {

View file

@ -72,20 +72,18 @@ function getFormattedTime(seconds: number, precise?: boolean): string {
* @returns {string} errorMessage * @returns {string} errorMessage
*/ */
function getErrorMessage(statusCode: number, responseText: string): string { function getErrorMessage(statusCode: number, responseText: string): string {
let errorMessage = ""; const postFix = ((responseText && !responseText.includes(`cf-wrapper`)) ? "\n\n" + responseText : "");
const postFix = (responseText ? "\n\n" + responseText : ""); // display response body for 4xx
if([400, 429, 409, 0].includes(statusCode)) {
if([400, 429, 409, 502, 503, 0].includes(statusCode)) { return chrome.i18n.getMessage(statusCode + "") + " " + chrome.i18n.getMessage("errorCode") + statusCode + postFix;
//treat them the same } else if (statusCode >= 500 && statusCode <= 599) {
// 503 == 502
if (statusCode == 503) statusCode = 502; if (statusCode == 503) statusCode = 502;
return chrome.i18n.getMessage(statusCode + "") + " " + chrome.i18n.getMessage("errorCode") + statusCode
errorMessage = chrome.i18n.getMessage(statusCode + "") + " " + chrome.i18n.getMessage("errorCode") + statusCode + "\n\n" + chrome.i18n.getMessage("statusReminder");
+ "\n\n" + chrome.i18n.getMessage("statusReminder");
} else { } else {
errorMessage = chrome.i18n.getMessage("connectionError") + statusCode; return chrome.i18n.getMessage("connectionError") + statusCode + postFix;
} }
return errorMessage + postFix;
} }
/* Gets percieved luminance of a color */ /* Gets percieved luminance of a color */