Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Anarios/return-youtube-dislike.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitrii Selivanov <selivano.d@gmail.com>2022-07-20 01:58:20 +0300
committerGitHub <noreply@github.com>2022-07-20 01:58:20 +0300
commit3fe2a78757687128f9fc02f91d9dc8cbfd908027 (patch)
tree363a41bc367a98afd32591f93007602f0deeed8f
parent10f4da6c5ce2f6414e32f143f8bf93887e7aede9 (diff)
parent4bf4d1a1e64a71bb4478837c12d39a011f165c3e (diff)
Merge branch 'develop' into revert-683-revert-644-patch-1
-rw-r--r--CONTRIBUTING.md2
-rw-r--r--CONTRIBUTINGfr.md59
-rw-r--r--CONTRIBUTINGru.md60
-rw-r--r--Docs/FAQ.md34
-rw-r--r--Docs/FAQfr.md23
-rw-r--r--Docs/FAQru.txt21
-rw-r--r--Docs/SECURITY-FAQ.md2
-rw-r--r--Docs/SECURITY-FAQfr.md31
-rw-r--r--Docs/SECURITY-FAQru.md31
-rw-r--r--Docs/readme.md2
-rw-r--r--Docs/readmefr.md39
-rw-r--r--Extensions/UserScript/Return Youtube Dislike.user.js89
-rw-r--r--Extensions/combined/_locales/de/messages.json34
-rw-r--r--Extensions/combined/_locales/en/messages.json78
-rw-r--r--Extensions/combined/_locales/es/messages.json106
-rw-r--r--Extensions/combined/_locales/fr/messages.json48
-rw-r--r--Extensions/combined/_locales/gr/messages.json33
-rw-r--r--Extensions/combined/_locales/it/messages.json41
-rw-r--r--Extensions/combined/_locales/ja/messages.json32
-rw-r--r--Extensions/combined/_locales/pt_BR/messages.json44
-rw-r--r--Extensions/combined/_locales/ru/messages.json30
-rw-r--r--Extensions/combined/popup.css67
-rw-r--r--Extensions/combined/popup.html70
-rw-r--r--Extensions/combined/popup.js50
-rw-r--r--Extensions/combined/ryd.background.js41
-rw-r--r--Extensions/combined/src/bar.js113
-rw-r--r--Extensions/combined/src/events.js13
-rw-r--r--Extensions/combined/src/starRating.js101
-rw-r--r--Extensions/combined/src/state.js30
-rw-r--r--Extensions/combined/src/utils.js46
-rw-r--r--README.md2
-rw-r--r--READMEes.md43
-rw-r--r--READMEfr.md96
-rw-r--r--READMEja.md99
-rw-r--r--READMEru.md18
-rw-r--r--READMEtr.md2
-rw-r--r--Website/_locales/en.ts4
-rw-r--r--Website/_locales/es.ts93
-rw-r--r--Website/_locales/fr.ts104
-rw-r--r--Website/_locales/ru.ts52
-rw-r--r--Website/_locales/tr.ts2
-rw-r--r--Website/layouts/default.vue2
-rw-r--r--Website/nuxt.config.js5
-rw-r--r--Website/pages/links.vue4
-rw-r--r--extension-description-store-french.txt20
-rw-r--r--extension-description-store-spanish.txt20
-rw-r--r--extension-description-store.txt2
47 files changed, 1679 insertions, 259 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index d05c308..b185db8 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,3 +1,5 @@
+Read this in other languages: [Français](CONTRIBUTINGfr.md)
+
# Welcome To Return YouTube Dislikes contributing guide
Thank you for investing your time in contributing to our project! All your changes will be reflected in the next version of the extension (or the [website](https://www.returnyoutubedislike.com/)).
diff --git a/CONTRIBUTINGfr.md b/CONTRIBUTINGfr.md
new file mode 100644
index 0000000..5a8f07a
--- /dev/null
+++ b/CONTRIBUTINGfr.md
@@ -0,0 +1,59 @@
+Lisez ceci dans d'autres langues : [English](CONTRIBUTING.md)
+
+# Bienvenue dans le guide de contribution à Return YouTube Dislikes
+
+Merci d'investir votre temps pour contribuer à notre projet ! Toutes vos modifications seront prises en compte dans la prochaine version de l'extension (ou du site web).
+
+## Pour commencer
+Veuillez utiliser [Prettier](https://prettier.io/) avec les paramètres par défaut pour le formatage du code.
+
+#### Prérequis
+Vous devez avoir installé node et npm pour créer la version bundle depuis le code source.
+
+Versions utilisées lors de la mise en place :
+
+- node: 12.18.4
+- npm: 6.14.6
+
+Pour créer le fichier `bundled-content-script.js` qui contient la plupart de la logique de cette extension, vous devez d'abord installer toutes les dépendances.
+
+1. Allez à la racine du repo et exécutez :
+
+```
+npm install
+```
+
+2. Exécutez la commande suivante pour créer le fichier `bundled-content-script.js` qui est utilisé dans le fichier `manifest.json`.
+
+```
+npm start // pour créer le(s) fichier(s) de construction et lancer un observateur de fichiers qui recharge à chaud lors de la sauvegarde.
+
+// ou
+
+npm run build // pour créer le(s) fichier(s) de construction une seule fois
+```
+
+Félicitations, vous êtes maintenant prêt·e à développer !
+
+Si vous n'avez jamais développé d'extensions pour Chrome ou si vous avez besoin d'une aide supplémentaire, consultez [ce tutoriel YouTube](https://www.youtube.com/watch?v=mdOj6HYE3_0) (en anglais).
+
+
+### Problèmes (aussi appelé issues en anglais)
+#### Signaler un problème
+Si vous rencontrez des problèmes avec l'extension, vérifiez que le problème n'a pas déjà été signalé. Si ce n'est pas le cas, [signalez le problème](https://github.com/Anarios/return-youtube-dislike/issues/new?assignees=&labels=bug&template=bug.yml&title=%28Bug%29%3A+), en utilisant le formulaire qui est fortement recommandé mais pas obligatoire.
+
+#### Résoudre un problème
+Si vous avez trouvé un problème que vous pensez pouvoir résoudre, ne soyez pas timide. Ouvrez une [PR](https://github.com/Anarios/return-youtube-dislike/pulls) [(C'est quoi ?)](https://blog.zenika.com/2017/01/24/pull-request-demystifie/) avec la solution et assurez-vous de mentionner le problème que vous résolvez (écrivez # puis le numéro de l'issue).
+
+### Demande de fonctionnalité (aussi appelé feature request en anglais)
+#### Ouverture d'une nouvelle demande de fonctionnalité
+Si vous avez une idée pour l'extension, n'hésitez pas à [ouvrir une demande de fonctionnalité](https://github.com/Anarios/return-youtube-dislike/issues/new?assignees=&labels=enhancement&template=feature-request.yml&title=%28Feature+Request%29%3A+), mais veuillez effectuer une recherche préalable pour vous assurer que la fonctionnalité n'est pas déjà proposée. L'utilisation du formulaire de demande de fonctionnalité est fortement recommandée mais pas obligatoire.
+
+#### Implémenter une demande de fonctionnalité
+Si vous avez trouvé une fonctionnalité que vous pensez pouvoir mettre en œuvre, ne soyez pas timide. Ouvrez une [PR](https://github.com/Anarios/return-youtube-dislike/pulls) [(C'est quoi ?)](https://blog.zenika.com/2017/01/24/pull-request-demystifie/) avec le correctif et assurez-vous de mentionner la fonctionnalité que vous implémentez (écrivez # puis le numéro de l'issue).
+
+### Quels PR acceptons-nous ?
+- Correction de problèmes.
+- Implémentation de fonctionnalités.
+- Fautes de frappe ou utilisation de mots plus simples et plus efficaces.
+- Contributions au site web. \ No newline at end of file
diff --git a/CONTRIBUTINGru.md b/CONTRIBUTINGru.md
new file mode 100644
index 0000000..e217046
--- /dev/null
+++ b/CONTRIBUTINGru.md
@@ -0,0 +1,60 @@
+Прочитать на других языках: [English](CONTRIBUTING.md)
+
+# Добро пожаловать в руководство по внесению вклада Return YouTube Dislikes
+
+Благодарим вас за то, что вы потратили своё время на участие в нашем проекте! Все ваши изменения будут отражены в следующей версии расширения (или на [сайте](https://www.returnyoutubedislike.com/)).
+
+## Приступая к работе
+Пожалуйста, используйте Prettier с настройками по умолчанию для форматирования кода.
+
+#### Необходимое
+
+Вам необходимо иметь установленные node и npm, чтобы создать bundled-версию источника.
+
+Версии, используемые при настройке:
+
+- node: 12.18.4
+- npm: 6.14.6
+
+Для создания `bundled-content-script.js` который содержит большую часть бизнес-логики этого расширения, вы должны сначала установить все зависимости.
+
+1. Перейдите в корень репозитория и выполните следующее:
+
+```
+npm install
+```
+
+2. Выполните следующую команду, чтобы создать `bundled-content-script.js`, который используется в `manifest.json`
+
+```
+npm start // для создания файла(ов) сборки и запуска наблюдателя за файлами, который выполняет hot-reload при сохранении
+
+// или
+
+npm run build // для создания файла(ов) сборки один раз
+```
+
+Поздравляем, теперь вы готовы к разработке!
+
+Если вы новичок в разработке расширений Chrome или вам нужна дополнительная помощь, посмотрите [это руководство на YouTube (англ.)](https://www.youtube.com/watch?v=mdOj6HYE3_0)
+
+
+### Вопросы
+#### Открытие нового вопроса/проблемы
+Если у вас возникли проблемы с расширением, пожалуйста, поищите, чтобы убедиться, что о проблеме ещё не сообщалось. Если это не так, откройте вопрос(issue), использование формы проблемы настоятельно рекомендуется, но не является обязательным.
+
+#### Решение вопроса
+Если вы нашли проблему, которую, как вам кажется, вы можете решить, не стесняйтесь. Откройте запрос на извлечение(pull request) с исправлением и обязательно укажите вопрос, который вы устраняете.
+
+### Запрос функции
+#### Открытие запроса на новую функцию
+Если у вас есть идея для расширения, не стесняйтесь открыть запрос на функцию, но, пожалуйста, прежде поищите другие запросы, чтобы убедиться, что функция уже не предложена. Использование формы запроса функции настоятельно рекомендуется, но не является обязательным
+
+#### Внедрение запроса на функцию
+Если вы нашли функцию, которую, как вам кажется, вы могли бы реализовать, не стесняйтесь. Откройте запрос на извлечение(pull request) с исправлением и обязательно укажите функцию, которую вы реализуете.
+
+### Какие запросы на извлечение(pull request) мы принимаем?
+- Исправления проблем.
+- Внедрения новых функций.
+- Исправления опечаток и упрощение текста.
+- Улучшения сайта. \ No newline at end of file
diff --git a/Docs/FAQ.md b/Docs/FAQ.md
index 02336f4..8efc8c9 100644
--- a/Docs/FAQ.md
+++ b/Docs/FAQ.md
@@ -1,21 +1,55 @@
+Read this in other languages: [Français](FAQfr.md)
+
# Frequently Asked Questions
## Before asking a question on GitHub or Discord, please refer to this.
+<br>
+
### **1. Where does this extension get the data?**
A Combination of Google APIs and scraped data.
We save all available data to our DB for it to be available after Google shuts down dislike counts in their API.
+<br>
+
### **2. Video dislike count doesn't update**
Right now video dislikes are cached, and aren't updated very frequenly. Once every 2-3 days, not more often.
Yeah, it's not ideal, but it is what it is. Working on improving how often we can update them.
+<br>
+
### **3. How does this work?**
The extension collects the video id of the video you are watching, fetches the dislike (and other fields like views, likes etc) using our API, if this is the first time the video was fetched by our API, it will use the YouTube API to get the data, then stores the data in a database for caching (cached for around 2-3 days) and archiving purposes and returns it to you. The extension then displays the dislikes to you.
+<br>
+
### **4. What will happen after the YouTube API stops returning the dislike count?**
The backend will switch to using a combination of archived dislike stats, estimates extrapolated from extension user data and estimates based on view/like ratios for videos whose dislikes weren't archived and for outdated dislike archives.
+<br>
+
+### **5. How is the dislike count calculated?**
+
+RYD uses the votes from it's users to extrapolate the dislike count.
+
+- If the video was uploaded after the API was shut down:
+
+ $$ \textup{RYD Dislike Count} = \left( \frac{\textup{RYD Users Like Count}}{\textup{RYD Users Dislike Count}} \right) \times \textup{Public Like Count} $$
+
+- If the RYD database somehow had the actual like and dislike count (provided by the uploader or from the archive), the dislike count will be calculated based on both - the users' votes and the archived value. The archived value will have less influence on the final count as it ages.
+
+<br>
+
+---
+
+This in video form
+
+[![IReturn YouTube Dislike Explained](https://yt-embed.herokuapp.com/embed?v=GSmmtv-0yYQ)](https://www.youtube.com/watch?v=GSmmtv-0yYQ)
+
+---
+
+<br>
+
## I have security / privacy concerns
See [this page](SECURITY-FAQ.md) for more info.
diff --git a/Docs/FAQfr.md b/Docs/FAQfr.md
new file mode 100644
index 0000000..c6c702e
--- /dev/null
+++ b/Docs/FAQfr.md
@@ -0,0 +1,23 @@
+Lisez ceci dans d'autres langues : [English](FAQ.md)
+
+# Foire Aux Questions
+## Avant de poser une question sur GitHub ou Discord, veuillez vous référer à ceci.
+
+### **1. Où cette extension obtient-elle les données ?**
+Une combinaison d'API de Google et de données scrapées.
+
+Nous sauvegardons toutes les données disponibles dans notre base de données pour qu'elles soient disponibles après que Google ait supprimé le compteur de dislikes dans son API.
+
+### **2. Le nombre de dislikes sur les vidéos n'est pas mis à jour**
+Actuellement, les dislike sont mis en cache et ne sont pas mis à jour très fréquemment. Une fois tous les 2-3 jours, pas plus souvent.
+
+Oui, ce n'est pas idéal, mais c'est ce que c'est. Nous travaillons à améliorer la fréquence des mises à jour.
+
+### **3. Comment cela fonctionne-t-il ?**
+L'extension collecte l'ID de la vidéo que vous regardez, récupère les dislikes (et d'autres champs comme les vues, les likes etc.) en utilisant notre API, si c'est la première fois que la vidéo a été récupérée par notre API, elle utilisera l'API YouTube pour obtenir les données, puis stocke les données dans une base de données pour la mise en cache (mise en cache pendant environ 2-3 jours) et à des fins d'archivage et vous les renvoie. L'extension vous affiche ensuite les dislikes.
+
+### **4. Que se passera-t-il lorsque l'API YouTube ne renverra plus le nombre de dislikes ?**
+Le backend utilisera une combinaison de statistiques du nombre de dislikes archivées, d'estimations extrapolées à partir des données d'extension des utilisateurs et d'estimations basées sur les ratios vues/likes pour les vidéos dont les dislikes n'ont pas été archivées et pour les archives dont le nombre de dislikes est obsolète.
+
+## Je suis préoccupé par la sécurité / la confidentialité
+Voir [cette page](SECURITY-FAQfr.md) pour plus d'informations. \ No newline at end of file
diff --git a/Docs/FAQru.txt b/Docs/FAQru.txt
new file mode 100644
index 0000000..5c770df
--- /dev/null
+++ b/Docs/FAQru.txt
@@ -0,0 +1,21 @@
+# Часто задаваемые вопросы
+## Прежде чем задать вопрос на GitHub или в Discord, пожалуйста, ознакомьтесь с этим.
+
+### **1. Откуда это расширение получает данные?**
+Комбинация API Google и старых данных.
+
+Мы сохраняем все имеющиеся данные в нашей базе данных, чтобы они были доступны после того, как Google прекратит подсчёт отметок «Не нравится» в своём API.
+
+### **2. Количество не понравившихся видео не обновляется**
+В настоящее время видео с отметками «Не нравится» кэшируются и обновляются не очень часто. Раз в 2-3 дня, не чаще.
+
+Да, это не идеально, но это то, что есть. Мы работаем над тем, чтобы улучшить частоту их обновления.
+
+### **3. Как это работает?**
+Расширение собирает идентификатор видео, которое вы смотрите, извлекает данные об отметках «Не нравится» (и другие поля, такие как просмотры, отметки «Нравится» и т.д.) с помощью нашего API, если видео было извлечено нашим API впервые, оно использует YouTube API для получения данных, затем сохраняет данные в базе данных для кэширования (кэшируются около 2-3 дней) и архивирования и возвращает их вам. После этого расширение отображает отметки «Не нравится» вам.
+
+### **4. Что произойдёт после того, как API YouTube перестанет возвращать данные о количестве отметок «Не нравится»?**
+Внутренняя часть нашего сервера переключится на использование комбинации архивных статистик отметок «Не нравится», оценок, экстраполированных из данных о пользователях расширения, и оценок, основанных на соотношении просмотров и отметок «Нравится» для видео, чьи отметки «Не нравится» не были заархивированы, и для устаревших архивов с отметками «Не нравится».
+
+## Я беспокоюсь о безопасности / конфиденциальности
+Более подробную информацию смотрите на [этой странице](SECURITY-FAQ.md). \ No newline at end of file
diff --git a/Docs/SECURITY-FAQ.md b/Docs/SECURITY-FAQ.md
index b9eb259..d7f11a9 100644
--- a/Docs/SECURITY-FAQ.md
+++ b/Docs/SECURITY-FAQ.md
@@ -1,3 +1,5 @@
+Read this in other languages: [Français](SECURITY-FAQfr.md)
+
# Security
### Are you tracking my viewing history?
diff --git a/Docs/SECURITY-FAQfr.md b/Docs/SECURITY-FAQfr.md
new file mode 100644
index 0000000..633e4c7
--- /dev/null
+++ b/Docs/SECURITY-FAQfr.md
@@ -0,0 +1,31 @@
+Lisez ceci dans d'autres langues : [English](SECURITY-FAQ.md)
+
+# Sécurité
+
+### Est-ce que vous traquer l'historique des vidéos que je visionne ?
+
+Non. Le code de l'extension est public et vous pouvez le voir par vous-même. La seule information envoyée est l'ID de la vidéo, qui est nécessaire pour récupérer le nombre de dislikes des vidéos. Aucun en-tête (headers) supplémentaire n'est envoyé. Sur la [couche de communication](https://fr.wikipedia.org/wiki/Mod%C3%A8le_OSI#Caract%C3%A9risation_r%C3%A9sum%C3%A9e_des_couches), votre adresse IP publique sera exposée au serveur, ainsi que l'heure à laquelle la demande a été faite. Toutefois, aucun de ces éléments ne permet de vous identifier de manière unique. Dans un environnement où vous ne pouvez avoir confiance en personne (zero-trust environment), le mieux que l'on puisse obtenir est une IP dynamique. Qui, aujourd'hui est la vôtre, demain est celle de votre voisin. Si vous êtes vraiment inquiet que votre IP soit tracée, vous utilisez probablement déjà un VPN.
+
+### Pouvez-vous m'identifier de manière unique si je dislike ?
+
+Oui. Lorsque vous dislikez une vidéo, nous créons pour vous un identifiant unique généré de manière aléatoire et non lié à votre compte Google. Cette mesure vise à empêcher les robots. Mais il n'y a aucun moyen de lier cet identifiant aléatoire à vous ou à votre compte YouTube personnel.
+
+### Quelles sont les informations dont vous disposez, exactement ?
+
+Juste l'ID de la vidéo. Pas vos commentaires, pas votre nom d'utilisateur, pas les personnes avec qui vous avez partagé la vidéo, pas de métadonnées supplémentaires. Rien. Juste l'ID de la vidéo.
+
+### Comment mon IP est-elle stockée ?
+
+Le backend conserve les adresses IP non hachées uniquement dans la mémoire volatile (RAM). Ces adresses ne sont pas stockées sur un disque dur et ne sont donc pas enregistrées. Nous hachons les adresses IP et stockons ça à la place. Ceci est fait pour empêcher le vandalisme de la base de données.
+
+### J'ai entendu des discussions sur OAuth, et l'accès à mon compte YouTube !
+
+Cette fonctionnalité sera facultative et fera l'objet d'une demande d'adhésion. Si vous êtes un créateur YouTube et que vous souhaitez partager vos statistiques de dislikes avec nous, vous pouvez le faire. La façon dont [OAuth](https://fr.wikipedia.org/wiki/OAuth) a été structuré, c'est en fait très sûr. Vous pouvez révoquer l'accès à votre compte à tout moment et nous donner des autorisations très spécifiques. Nous ne demanderons pas d'autorisations qui ne sont pas nécessaires. Nous ne vous demanderons que l'autorisation de consulter les statistiques de vos vidéos.
+
+### Comment puis-je faire confiance à ce compte de dislikes ?
+
+Nous avons mis en place des mesures pour prévenir les attaques de robots et nous allons continuer à travailler pour améliorer l'efficacité du système de prévention des robots : cela nous aidera à faire en sorte que le nombre de dislikes soit une bonne représentation du nombre réel. Bien entendu, il ne sera jamais précis à 100 %, c'est donc à vous de décider si vous lui faites confiance ou non.
+
+### Pourquoi ne pas partager le code du backend ?
+
+Nous la partagerons à un moment donné - mais il n'y a pas vraiment de raison de la partager pour le moment. Cela donne un faux sentiment de sécurité, car dans un système zero-trust, nous pourrions tout aussi bien publier une version et en déployer une autre. Il y a de nombreuses raisons de garder le code caché, notamment pour lutter contre le spam. Cacher/dissimuler le code de traitement du spam est une pratique assez standard. \ No newline at end of file
diff --git a/Docs/SECURITY-FAQru.md b/Docs/SECURITY-FAQru.md
new file mode 100644
index 0000000..f69257e
--- /dev/null
+++ b/Docs/SECURITY-FAQru.md
@@ -0,0 +1,31 @@
+Прочитать на других языках: [English](SECURITY-FAQ.md)
+
+# Безопасность
+
+### Вы отслеживаете мою историю просмотров?
+
+Нет. Код расширения находится в открытом доступе, и вы можете ознакомиться с ним самостоятельно. Единственная передаваемая информация - это идентификатор видео, который необходим для получения данных о количестве просмотров видео. Никаких дополнительных заголовков не передаётся. На коммуникационном уровне серверу будет передан ваш публичный IP-адрес, а также время, когда был сделан запрос. Однако ничто из этого не идентифицирует вас каким-либо образом. Предполагая среду с нулевым доверием, лучшее, что мы можем получить, это динамический IP. Который сегодня ваш, а завтра - вашего соседа. Если вы действительно беспокоитесь о том, что ваш IP может быть отслежен, вы, вероятно, уже используете какой-нибудь VPN.
+
+### Можете ли вы однозначно идентифицировать меня, если я оставил отметку «Не нравится»?
+
+Да. Когда вы оставляете видео отметку «Не нравится», мы создаём для вас случайно созданный уникальный идентификатор, который не привязан к вашему аккаунту Google. Это делается для избежания ботов. Но нет никакого способа привязать этот случайный идентификатор к вам или вашему личному аккаунту YouTube.
+
+### Какой именно информацией вы располагаете?
+
+Только идентификатор видео. Ни ваших комментариев, ни вашего имени пользователя, ни того, с кем вы поделились видео, ни каких-либо дополнительных метаданных. Ничего. Только идентификатор видео.
+
+### Как хранится мой IP-адрес?
+
+Внутренняя часть нашего сервера хранит нехешированные IP-адреса только в энергозависимой памяти (ОЗУ). Эти адреса не хранятся на жёстком диске и поэтому не регистрируются. Мы хэшируем IP-адреса, и оно хранится вместо них. Это сделано для предотвращения вандализма в базе данных.
+
+### Я слышал обсуждение OAuth и доступа к моему аккаунту на YouTube!
+
+Эта функция будет необязательной и очень нужной. Если вы являетесь создателем YouTube и хотите поделиться с нами статистикой отметок «Не нравится», вы можете это сделать. По своей структуре [OAuth](https://ru.wikipedia.org/wiki/OAuth#:~:text=%D0%B1%D0%B5%D0%B7%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8%20%D0%B5%D0%B9%20(%D1%82%D1%80%D0%B5%D1%82%D1%8C%D0%B5%D0%B9%20%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%B5)%20%D0%BB%D0%BE%D0%B3%D0%B8%D0%BD%D0%B0%20%D0%B8%20%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8F) очень безопасен. Вы можете отозвать доступ к своему аккаунту в любое время, и можете дать нам ограниченные разрешения. Мы не будем запрашивать никаких разрешений, которые не требуются. Мы будем запрашивать разрешения только для просмотра статистики ваших видео.
+
+### Как я могу доверять этому счётчику отметок «Не нравится»?
+
+Мы приняли меры по предотвращению атак ботов и собираемся продолжать работать над повышением эффективности системы предотвращения ботов: это поможет нам сохранить подсчёт отметок «Не нравится» как хороший представитель фактического количества. Конечно, он никогда не будет точным на 100%, поэтому вы сами решаете, доверять ему или нет.
+
+### Почему бы вам не поделиться кодом внутренней части своего сервера?
+
+Мы поделимся им в какой-то момент - но сейчас нет никаких реальных причин делиться ею. Это даёт ложное чувство безопасности - ведь в системе с нулевым доверием мы можем с таким же успехом раскрыть одну версию, но развернуть другую. Есть много причин держать код в тайне, в частности, как мы боремся со спамом. Скрытие и запутывание кода обработки спама - это довольно стандартная практика.
diff --git a/Docs/readme.md b/Docs/readme.md
index 52567fb..5a802b2 100644
--- a/Docs/readme.md
+++ b/Docs/readme.md
@@ -1,3 +1,5 @@
+Read this in other languages: [Français](readmefr.md)
+
**Contents**
- [Guides](#guides)
diff --git a/Docs/readmefr.md b/Docs/readmefr.md
new file mode 100644
index 0000000..3d5dd5d
--- /dev/null
+++ b/Docs/readmefr.md
@@ -0,0 +1,39 @@
+Lisez ceci dans d'autres langues : [English](readme.md)
+
+**Contenu**
+
+- [Guides](#guides)
+- [FAQ](#faq)
+<!-- - [Autres listes](#autres-listes) -->
+
+<br>
+
+## Guides
+
+- [Téléchargement, installation et utilisation](https://github.com/Anarios/return-youtube-dislike/wiki/T%C3%A9l%C3%A9chargement,-installation-et-utilisation)
+- [Dépannage](https://github.com/Anarios/return-youtube-dislike/wiki/Guide-de-d%C3%A9pannage)
+<!-- - [FAQ](FAQfr.md)
+- [Quand et comment signaler les bugs](Guide__Bug_Reportingfr.md)
+- [Contribution](/CONTRIBUTINGfr.md) -->
+<!-- - [Comment mettre à jour le wiki](/) -->
+
+<br>
+
+
+## FAQ
+
+- [Général](FAQfr.md)
+- [Sécurité](SECURITY-FAQfr.md)
+
+<!-- - [Vie privée](FAQ_Privacyfr.md)
+- [Technique](FAQ_Technicalfr.md)
+- [Créateurs](FAQ_Creatorsfr.md)
+
+<br>
+
+## Autres listes
+
+- [Problèmes courants](Common_Problemsfr.md)
+- [Questions répétitives](Repeated_Questionsfr.md)
+- [Demandes répétitives de fonctionnalités](Repeated_Feature_requestsfr.md)
+- [Questions répétitives](Repeated_Issuesfr.md) --> \ No newline at end of file
diff --git a/Extensions/UserScript/Return Youtube Dislike.user.js b/Extensions/UserScript/Return Youtube Dislike.user.js
index 476561b..453c56e 100644
--- a/Extensions/UserScript/Return Youtube Dislike.user.js
+++ b/Extensions/UserScript/Return Youtube Dislike.user.js
@@ -33,6 +33,7 @@ const extConfig = {
colorTheme: "classic", // [classic*, accessible, neon] Color theme (red/green, blue/yellow, pink/cyan)
numberDisplayFormat: "compactShort", // [compactShort*, compactLong, standard] Number format (For non-English locale users, you may be able to improve appearance with a different option. Please file a feature request if your locale is not covered)
numberDisplayRoundDown: true, // [true*, false] Round down numbers (Show rounded down numbers)
+ tooltipPercentageMode: "none", // [none*, dash_like, dash_dislike, both, only_like, only_dislike] Mode of showing percentage in like/dislike bar tooltip.
numberDisplayReformatLikes: false, // [true, false*] Re-format like numbers (Make likes and dislikes format consistent)
// END USER OPTIONS
};
@@ -203,10 +204,10 @@ function getLikeCountFromButton() {
if (isShorts()) {
//Youtube Shorts don't work with this query. It's not nessecary; we can skip it and still see the results.
//It should be possible to fix this function, but it's not critical to showing the dislike count.
- return 0;
+ return false;
}
let likesStr = getLikeButton()
- .querySelector("button")
+ .querySelector("yt-formatted-string#text")
.getAttribute("aria-label")
.replace(/\D/g, "");
return likesStr.length > 0 ? parseInt(likesStr) : false;
@@ -262,6 +263,32 @@ function createRateBar(likes, dislikes) {
const widthPercent =
likes + dislikes > 0 ? (likes / (likes + dislikes)) * 100 : 50;
+ var likePercentage = parseFloat(widthPercent.toFixed(1));
+ const dislikePercentage = (100 - likePercentage).toLocaleString();
+ likePercentage = likePercentage.toLocaleString();
+
+ var tooltipInnerHTML;
+ switch (extConfig.tooltipPercentageMode) {
+ case "dash_like":
+ tooltipInnerHTML = `${likes.toLocaleString()}&nbsp;/&nbsp;${dislikes.toLocaleString()}&nbsp;&nbsp;-&nbsp;&nbsp;${likePercentage}%`
+ break;
+ case "dash_dislike":
+ tooltipInnerHTML = `${likes.toLocaleString()}&nbsp;/&nbsp;${dislikes.toLocaleString()}&nbsp;&nbsp;-&nbsp;&nbsp;${dislikePercentage}%`
+ break;
+ case "both":
+ tooltipInnerHTML = `${likePercentage}%&nbsp;/&nbsp;${dislikePercentage}%`
+ break;
+ case "only_like":
+ tooltipInnerHTML = `${likePercentage}%`
+ break;
+ case "only_dislike":
+ tooltipInnerHTML = `${dislikePercentage}%`
+ break;
+ default:
+ tooltipInnerHTML = `${likes.toLocaleString()}&nbsp;/&nbsp;${dislikes.toLocaleString()}`
+ }
+
+
if (!rateBar && !isMobile) {
let colorLikeStyle = "";
let colorDislikeStyle = "";
@@ -269,7 +296,7 @@ function createRateBar(likes, dislikes) {
colorLikeStyle = "; background-color: " + getColorFromTheme(true);
colorDislikeStyle = "; background-color: " + getColorFromTheme(false);
}
-
+
document.getElementById("menu-container").insertAdjacentHTML(
"beforeend",
`
@@ -286,7 +313,7 @@ function createRateBar(likes, dislikes) {
</div>
</div>
<tp-yt-paper-tooltip position="top" id="ryd-dislike-tooltip" class="style-scope ytd-sentiment-bar-renderer" role="tooltip" tabindex="-1">
- <!--css-build:shady-->${likes.toLocaleString()}&nbsp;/&nbsp;${dislikes.toLocaleString()}
+ <!--css-build:shady-->${tooltipInnerHTML}
</tp-yt-paper-tooltip>
</div>
`
@@ -300,8 +327,8 @@ function createRateBar(likes, dislikes) {
document.querySelector(
"#ryd-dislike-tooltip > #tooltip"
- ).innerHTML = `${likes.toLocaleString()}&nbsp;/&nbsp;${dislikes.toLocaleString()}`;
-
+ ).innerHTML = tooltipInnerHTML;
+
if (extConfig.coloredBar) {
document.getElementById("return-youtube-dislike-bar-container").style.backgroundColor =
getColorFromTheme(false);
@@ -372,6 +399,12 @@ function likeClicked() {
createRateBar(likesvalue, dislikesvalue);
previousState = 1;
}
+ if (extConfig.numberDisplayReformatLikes === true) {
+ const nativeLikes = getLikeCountFromButton();
+ if (nativeLikes !== false) {
+ setLikes(numberFormat(nativeLikes));
+ }
+ }
}
}
@@ -393,6 +426,12 @@ function dislikeClicked() {
setDislikes(numberFormat(dislikesvalue));
createRateBar(likesvalue, dislikesvalue);
previousState = 2;
+ if (extConfig.numberDisplayReformatLikes === true) {
+ const nativeLikes = getLikeCountFromButton();
+ if (nativeLikes !== false) {
+ setLikes(numberFormat(nativeLikes));
+ }
+ }
}
}
}
@@ -434,32 +473,38 @@ function roundDown(num) {
}
function numberFormat(numberState) {
- let userLocales;
- try {
- userLocales = new URL(
- Array.from(document.querySelectorAll("head > link[rel='search']"))
- ?.find((n) => n?.getAttribute("href")?.includes("?locale="))
- ?.getAttribute("href")
- )?.searchParams?.get("locale");
- } catch {
- userLocales = document.documentElement.lang;
- }
-
let numberDisplay;
if (extConfig.numberDisplayRoundDown === false) {
numberDisplay = numberState;
} else {
numberDisplay = roundDown(numberState);
}
- return getNumberFormatter(extConfig.numberDisplayFormat, userLocales).format(
+ return getNumberFormatter(extConfig.numberDisplayFormat).format(
numberDisplay
);
}
-function getNumberFormatter(optionSelect, userLocales) {
+function getNumberFormatter(optionSelect) {
+ let userLocales;
+ if (document.documentElement.lang) {
+ userLocales = document.documentElement.lang;
+ } else if (navigator.language) {
+ userLocales = navigator.language;
+ } else {
+ try {
+ userLocales = new URL(
+ Array.from(document.querySelectorAll("head > link[rel='search']"))
+ ?.find((n) => n?.getAttribute("href")?.includes("?locale="))
+ ?.getAttribute("href")
+ )?.searchParams?.get("locale");
+ } catch {
+ cLog('Cannot find browser locale. Use en as default for number formatting.');
+ userLocales = 'en';
+ }
+ }
+
let formatterNotation;
let formatterCompactDisplay;
-
switch (optionSelect) {
case "compactLong":
formatterNotation = "compact";
@@ -476,7 +521,7 @@ function getNumberFormatter(optionSelect, userLocales) {
}
const formatter = Intl.NumberFormat(
- document.documentElement.lang || userLocales || navigator.language,
+ userLocales,
{
notation: formatterNotation,
compactDisplay: formatterCompactDisplay,
@@ -516,7 +561,7 @@ function getColorFromTheme(voteIsLike) {
function setEventListeners(evt) {
let jsInitChecktimer;
- function checkForJS_Finish(check) {
+ function checkForJS_Finish() {
console.log();
if (isShorts() || (getButtons()?.offsetParent && isVideoLoaded())) {
const buttons = getButtons();
diff --git a/Extensions/combined/_locales/de/messages.json b/Extensions/combined/_locales/de/messages.json
index 9250528..9b0a7ba 100644
--- a/Extensions/combined/_locales/de/messages.json
+++ b/Extensions/combined/_locales/de/messages.json
@@ -2,7 +2,6 @@
"extensionName": {
"message": "Return YouTube Dislike"
},
-
"extensionNameBeta": {
"message": "Return YouTube Dislike Beta"
},
@@ -50,5 +49,38 @@
},
"customNumberFormats": {
"message": "Benutzerdefinierte Zahlenformate"
+ },
+ "considerDonating": {
+ "message": "Das Einzige, was die Erweiterung am Laufen hält, sind Ihre Spenden, bitte erwägen Sie, das Projekt zu unterstützen."
+ },
+ "roundNumbers": {
+ "message": "Zeige abgerundete Zahlen"
+ },
+ "roundNumbersHover": {
+ "message": "Zahlen abrunden (Standardverhalten von YouTube)."
+ },
+ "reformatLikes": {
+ "message": "Wie Zahlen neu formatieren"
+ },
+ "reformatLikesHover": {
+ "message": "Machen Sie das Format der Vorlieben und Abneigungen konsistent."
+ },
+ "numberFormat": {
+ "message": "Zahlenformat:"
+ },
+ "colorizeRatio": {
+ "message": "Verhältnisbalken einfärben"
+ },
+ "colorizeRatioHover": {
+ "message": "Benutzerdefinierte Farben für die Verhältnisleiste verwenden."
+ },
+ "colorizeThumbs": {
+ "message": "Buttons einfärben"
+ },
+ "colorizeThumbsHover": {
+ "message": "Benutzerdefinierte Farben für die Schaltflächensymbole verwenden."
+ },
+ "colorTheme": {
+ "message": "Farbschema:"
}
}
diff --git a/Extensions/combined/_locales/en/messages.json b/Extensions/combined/_locales/en/messages.json
index 28c476c..a5ba9c0 100644
--- a/Extensions/combined/_locales/en/messages.json
+++ b/Extensions/combined/_locales/en/messages.json
@@ -23,6 +23,9 @@
"linkHelp": {
"message": "Help"
},
+ "linkChangelog": {
+ "message": "Change Log"
+ },
"legendSettings": {
"message": "Settings"
},
@@ -30,16 +33,55 @@
"message": "Disable like/dislike submission"
},
"textLikesDisabled": {
- "message": "disabled by owner"
+ "message": "Disabled by Owner"
},
"textSettingsHover": {
"message": "Stops counting your likes and dislikes."
},
+ "textRoundingNumbers": {
+ "message": "Round down like/dislike stats (default YouTube behavior)"
+ },
+ "textRoundingNumbersHover": {
+ "message": "Show rounded down stats."
+ },
+ "textConsistentFormat": {
+ "message": "Make likes and dislikes format consistent"
+ },
+ "textConsistentFormatHover": {
+ "message": "Re-format like numbers."
+ },
+ "textNumberFormat": {
+ "message": "Number format:"
+ },
+ "textColorizeRatioBar": {
+ "message": "Colorize ratio bar"
+ },
+ "textColorizeRatioBarHover": {
+ "message": "Use custom colors for ratio bar."
+ },
+ "textColorizeThumbs": {
+ "message": "Colorize thumbs"
+ },
+ "textColorizeThumbsHover": {
+ "message": "Use custom colors for thumb icons."
+ },
+ "textColorTheme": {
+ "message": "Color theme:"
+ },
+ "textColorTheme1": {
+ "message": "Classic"
+ },
+ "textColorTheme2": {
+ "message": "Accessible"
+ },
+ "textColorTheme3": {
+ "message": "Neon"
+ },
"textTempUnavailable": {
- "message": "temporarily unavailable"
+ "message": "Temporarily Unavailable"
},
"textUpdate": {
- "message": "update to"
+ "message": "Update to"
},
"version30installed": {
"message": "Version 3.0.0.1 installed"
@@ -58,5 +100,35 @@
},
"considerDonating": {
"message": "The only thing that keeps the extension running is your donations, please consider supporting the project."
+ },
+ "roundNumbers": {
+ "message": "Show rounded down numbers"
+ },
+ "roundNumbersHover": {
+ "message": "Round down numbers (default YouTube behavior)."
+ },
+ "reformatLikes": {
+ "message": "Re-format like numbers"
+ },
+ "reformatLikesHover": {
+ "message": "Make likes and dislikes format consistent."
+ },
+ "numberFormat": {
+ "message": "Number format:"
+ },
+ "colorizeRatio": {
+ "message": "Colorize ratio bar"
+ },
+ "colorizeRatioHover": {
+ "message": "Use custom colors for the ratio bar."
+ },
+ "colorizeThumbs": {
+ "message": "Colorize thumbs"
+ },
+ "colorizeThumbsHover": {
+ "message": "Use custom colors for the thumb icons."
+ },
+ "colorTheme": {
+ "message": "Color theme:"
}
}
diff --git a/Extensions/combined/_locales/es/messages.json b/Extensions/combined/_locales/es/messages.json
index efb95da..121c0ee 100644
--- a/Extensions/combined/_locales/es/messages.json
+++ b/Extensions/combined/_locales/es/messages.json
@@ -1,15 +1,15 @@
{
"extensionName": {
- "message": "Regresar los Dislikes de YouTube"
+ "message": "Return YouTube Dislike"
},
"extensionNameBeta": {
"message": "Return YouTube Dislike Beta"
},
"extensionDesc": {
- "message": "Regresa la posibilidad de ver los dislikes"
+ "message": "Recupera la característica de los «dislikes» («No me gusta»)"
},
"textDeveloper": {
- "message": "por Dmitry Selivanov y la Comunidad"
+ "message": "por Dmitry Selivanov y la comunidad"
},
"linkWebsite": {
"message": "Página web"
@@ -23,16 +23,112 @@
"linkHelp": {
"message": "Ayuda"
},
+ "linkChangelog": {
+ "message": "Historial de cambios"
+ },
"legendSettings": {
"message": "Ajustes"
},
"textSettings": {
- "message": "Desactivar los dislikes"
+ "message": "Desactivar envío de votos"
+ },
+ "textLikesDisabled": {
+ "message": "desactivado por el propietario"
},
"textSettingsHover": {
- "message": "Dejar de contar los dislikes."
+ "message": "Deja de contar tus «Me gusta» y «No me gusta»."
+ },
+ "textRoundingNumbers": {
+ "message": "Redondear cifras (comportamiento original de YouTube)"
+ },
+ "textRoundingNumbersHover": {
+ "message": "Muestra las estadísticas redondeadas."
+ },
+ "textConsistentFormat": {
+ "message": "Unificar formato de votos"
+ },
+ "textConsistentFormatHover": {
+ "message": "Cambia el formato de las cifras de «Me gusta» y «No me gusta»."
+ },
+ "textNumberFormat": {
+ "message": "Formato de cifras:"
+ },
+ "textColorizeRatioBar": {
+ "message": "Cambiar color de barra de votos"
+ },
+ "textColorizeRatioBarHover": {
+ "message": "Utiliza colores personalizados para la barra de votos."
+ },
+ "textColorizeThumbs": {
+ "message": "Cambiar color de iconos de pulgares"
+ },
+ "textColorizeThumbsHover": {
+ "message": "Utiliza colores personalizados para los iconos de los pulgares."
+ },
+ "textColorTheme": {
+ "message": "Esquema de colores:"
+ },
+ "textColorTheme1": {
+ "message": "Clásico"
+ },
+ "textColorTheme2": {
+ "message": "Accesible"
+ },
+ "textColorTheme3": {
+ "message": "Neón"
+ },
+ "textTempUnavailable": {
+ "message": "no disponible temporalmente"
},
"textUpdate": {
"message": "actualizar a"
+ },
+ "version30installed": {
+ "message": "Versión 3.0.0.1 instalada"
+ },
+ "whatsnew": {
+ "message": "Novedades"
+ },
+ "shortsSupport": {
+ "message": "Soporte de YouTube Shorts"
+ },
+ "customColors": {
+ "message": "Colores personalizados para la barra y los botones que no me gustan"
+ },
+ "customNumberFormats": {
+ "message":"Formatos de números personalizados"
+ },
+ "considerDonating": {
+ "message": "Lo único que mantiene la extensión en funcionamiento son sus donaciones, considere apoyar el proyecto."
+ },
+ "roundNumbers": {
+ "message": "Mostrar números redondeados hacia abajo"
+ },
+ "roundNumbersHover": {
+ "message": "Redondear números hacia abajo (comportamiento predeterminado de YouTube)."
+ },
+ "reformatLikes": {
+ "message": "Reformatear como números"
+ },
+ "reformatLikesHover": {
+ "message": "Haz que el formato de like y dislike sea consistente."
+ },
+ "numberFormat": {
+ "message": "Formato de número:"
+ },
+ "colorizeRatio": {
+ "message": "Colorear barra de relación"
+ },
+ "colorizeRatioHover": {
+ "message": "Usar colores personalizados para la barra de proporción."
+ },
+ "colorizeThumbs": {
+ "message": "Colorear los botones likes y dislike"
+ },
+ "colorizeThumbsHover": {
+ "message": "Usar colores personalizados para los íconos de los botones."
+ },
+ "colorTheme": {
+ "message": "Combinación de colores:"
}
}
diff --git a/Extensions/combined/_locales/fr/messages.json b/Extensions/combined/_locales/fr/messages.json
index 46105d0..95d6193 100644
--- a/Extensions/combined/_locales/fr/messages.json
+++ b/Extensions/combined/_locales/fr/messages.json
@@ -40,5 +40,53 @@
},
"textUpdate": {
"message": "mettre à jour vers"
+ },
+ "version30installed": {
+ "message": "Version 3.0.0.1 installée"
+ },
+ "whatsnew": {
+ "message": "Quoi de neuf"
+ },
+ "shortsSupport": {
+ "message": "Prise en charge des YouTube Shorts"
+ },
+ "customColors": {
+ "message": "Couleurs personnalisées pour la barre du dislike et les boutons"
+ },
+ "customNumberFormats": {
+ "message": "Formats numériques personnalisés"
+ },
+ "considerDonating": {
+ "message": "La seule chose qui permet à l'extension de fonctionner est vos dons, veuillez envisager de soutenir le projet."
+ },
+ "roundNumbers": {
+ "message": "Afficher les nombres arrondis"
+ },
+ "roundNumbersHover": {
+ "message": "Arrondir les nombres à la baisse (comportement par défaut de YouTube)."
+ },
+ "reformatLikes": {
+ "message": "Formater le nombre de likes"
+ },
+ "reformatLikesHover": {
+ "message": "Rend la valeur des statistiques plus cohérente."
+ },
+ "numberFormat": {
+ "message": "Format numérique:"
+ },
+ "colorizeRatio": {
+ "message": "Coloriser la barre de ratio"
+ },
+ "colorizeRatioHover": {
+ "message": "Utilisez des couleurs personnalisées pour la barre de ratio."
+ },
+ "colorizeThumbs": {
+ "message": "Mettre en couleur les boutons like et dislike"
+ },
+ "colorizeThumbsHover": {
+ "message": "Utiliser des couleurs personnalisées pour les boutons like et dislike."
+ },
+ "colorTheme": {
+ "message": "Schéma de couleur:"
}
}
diff --git a/Extensions/combined/_locales/gr/messages.json b/Extensions/combined/_locales/gr/messages.json
index dc548e6..269504c 100644
--- a/Extensions/combined/_locales/gr/messages.json
+++ b/Extensions/combined/_locales/gr/messages.json
@@ -49,5 +49,38 @@
},
"customNumberFormats": {
"message": "Προσαρμοζόμενη μορφή αριθμών."
+ },
+ "considerDonating": {
+ "message": "Το μόνο πράγμα που διατηρεί την επέκταση σε λειτουργία είναι οι δωρεές σας, σκεφτείτε να υποστηρίξετε το έργο."
+ },
+ "roundNumbers": {
+ "message": "Εμφάνιση στρογγυλεμένων αριθμών"
+ },
+ "roundNumbersHover": {
+ "message": "Στρογγυλοποιήστε την τιμή μέτρησης (αυτή είναι η προεπιλεγμένη επιλογή του YouTube)."
+ },
+ "reformatLikes": {
+ "message": "Μορφοποίηση του αριθμού των likes"
+ },
+ "reformatLikesHover": {
+ "message": "Κάνει την αξία των στατιστικών πιο συνεπή."
+ },
+ "numberFormat": {
+ "message": "Αριθμητική μορφή"
+ },
+ "colorizeRatio": {
+ "message": "Χρωματίστε τη γραμμή dislikes"
+ },
+ "colorizeRatioHover": {
+ "message": "Χρωματίστε τη γραμμή dislikes με προσαρμοσμένα χρώματα."
+ },
+ "colorizeThumbs": {
+ "message": "Χρωματίστε τα κουμπιά"
+ },
+ "colorizeThumbsHover": {
+ "message": "Χρωματίστε τα κουμπιά likes και dislikes με προσαρμοσμένα χρώματα."
+ },
+ "colorTheme": {
+ "message": "Χρωματικός συνδυασμός:"
}
}
diff --git a/Extensions/combined/_locales/it/messages.json b/Extensions/combined/_locales/it/messages.json
index dbcca07..adf6dcb 100644
--- a/Extensions/combined/_locales/it/messages.json
+++ b/Extensions/combined/_locales/it/messages.json
@@ -9,7 +9,7 @@
"message": "Ripristina la possibilità di vedere i dislikes"
},
"textDeveloper": {
- "message": "di Dmitry Selivanov e la Community"
+ "message": "grazie a Dmitry Selivanov e alla Comunità"
},
"linkWebsite": {
"message": "Sito web"
@@ -27,10 +27,10 @@
"message": "Impostazioni"
},
"textSettings": {
- "message": "Disabilita l'invio di like/dislike"
+ "message": "Disabilita l'invio dei like e dei dislike"
},
"textSettingsHover": {
- "message": "Interrompe il conteggio dei tuoi likes e dislikes."
+ "message": "Interrompe il conteggio dei tuoi likes e dislikes da parte dell'estensione."
},
"textUpdate": {
"message": "aggiorna a"
@@ -39,7 +39,7 @@
"message": "Versione 3.0.0.1 installata"
},
"whatsnew": {
- "message": "Cosa c'è di nuovo"
+ "message": "Quali sono le novità"
},
"shortsSupport": {
"message": "Supporto per YouTube Shorts"
@@ -49,5 +49,38 @@
},
"customNumberFormats": {
"message": "Formati numerici personalizzati"
+ },
+ "considerDonating": {
+ "message": "Le uniche cosa che tengono in piedi il progetto sono le vostre donazioni. Per favore, considera di effettuare una donazione per supportarci. Grazie."
+ },
+ "roundNumbers": {
+ "message": "Mostra i numeri arrotondati"
+ },
+ "roundNumbersHover": {
+ "message": "Arrotonda il valore del conteggio (questa è l'opzione predefinita di YouTube)."
+ },
+ "reformatLikes": {
+ "message": "Formatta il numero di like"
+ },
+ "reformatLikesHover": {
+ "message": "Rende il valore delle statistiche più consistente."
+ },
+ "numberFormat": {
+ "message": "Formato numerico"
+ },
+ "colorizeRatio": {
+ "message": "Colora la barra dei dislike"
+ },
+ "colorizeRatioHover": {
+ "message": "Colora la barra dei dislike con colori personalizzati."
+ },
+ "colorizeThumbs": {
+ "message": "Colora i pulsanti"
+ },
+ "colorizeThumbsHover": {
+ "message": "Colora i pulsanti dei like e dei dislike con colori personalizzati."
+ },
+ "colorTheme": {
+ "message": "Schema colori:"
}
}
diff --git a/Extensions/combined/_locales/ja/messages.json b/Extensions/combined/_locales/ja/messages.json
index baf7d7f..9a84fae 100644
--- a/Extensions/combined/_locales/ja/messages.json
+++ b/Extensions/combined/_locales/ja/messages.json
@@ -57,6 +57,36 @@
"message": "評価数の表示形式のカスタマイズ"
},
"considerDonating": {
- "message": "この拡張機能を存続させることができるのは、皆様からの寄付だけです。"
+ "message": "この拡張機能を存続させることができるのは,皆様からの寄付だけです。"
+ },
+ "roundNumbers":{
+ "message":"四捨五入された数値を表示"
+ },
+ "roundNumbersHover":{
+ "message": "カウント値を四捨五入します(これはYouTubeのデフォルトオプションです)。"
+ },
+ "reformatLikes":{
+ "message":"いいねの数をフォーマットする"
+ },
+ "reformatLikesHover":{
+ "message":"統計値の一貫性を高めます。"
+ },
+ "numberFormat":{
+ "message":"数値形式"
+ },
+ "colorizeRatio":{
+ "message":"嫌いなバーに色を付ける"
+ },
+ "colorizeRatioHover":{
+ "message":"嫌いなバーをカスタムカラーで色付けします。"
+ },
+ "colorizeThumbs":{
+ "message":"ボタンに色を付ける"
+ },
+ "colorizeThumbsHover":{
+ "message":"カスタムカラーのボタンの色が好きで嫌いです。"
+ },
+ "colorTheme":{
+ "message": "配色:"
}
}
diff --git a/Extensions/combined/_locales/pt_BR/messages.json b/Extensions/combined/_locales/pt_BR/messages.json
index 26f40f3..fa6c75a 100644
--- a/Extensions/combined/_locales/pt_BR/messages.json
+++ b/Extensions/combined/_locales/pt_BR/messages.json
@@ -1,21 +1,21 @@
{
"extensionName": {
- "message": "Devolver Dislikes do YouTube"
+ "message": "Voltar Dislikes do YouTube"
},
"extensionNameBeta": {
- "message": "Return YouTube Dislike Beta"
+ "message": "Voltar Dislikes do YouTube Beta"
},
"extensionDesc": {
- "message": "A capacidade de ver os retornos de não gostos"
+ "message": "Voltar os Deslikes do YouTube"
},
"textDeveloper": {
- "message": "por Dmitry Selivanov e a Comunidade"
+ "message": "por Dmitry Selivanov e Comunidade"
},
"linkWebsite": {
"message": "Website"
},
"linkFAQ": {
- "message": "FAQ"
+ "message": "Perguntas Frequentes"
},
"linkDonate": {
"message": "Doe"
@@ -24,15 +24,39 @@
"message": "Ajuda"
},
"legendSettings": {
- "message": "Ajustes"
+ "message": "Configurações"
},
"textSettings": {
- "message": "Desaproveitar as aversões"
+ "message": "Desativar envio de Curtidas/Não Curtidas"
+ },
+ "textLikesDisabled": {
+ "message": "Desativado pelo proprietário"
},
"textSettingsHover": {
- "message": "Pare de contar as antipatias."
+ "message": "Parar de contar suas curtidas e não curtidas."
+ },
+ "textTempUnavailable": {
+ "message": "Temporariamente indisponível"
},
"textUpdate": {
- "message": "atualização para"
+ "message": "Atualizar para"
+ },
+ "version30installed": {
+ "message": "Versão 3.0.0.1 instalada"
+ },
+ "whatsnew": {
+ "message": "O que há de novo?"
+ },
+ "shortsSupport": {
+ "message": "Suporte para Shorts"
+ },
+ "customColors": {
+ "message": "Cores personalizadas para barra de não curtidas e botões"
+ },
+ "customNumberFormats": {
+ "message": "Formato de números personalizados"
+ },
+ "considerDonating": {
+ "message": "A única coisa que mantém a extensão funcionando são suas doações, considere apoiar o projeto."
}
-}
+} \ No newline at end of file
diff --git a/Extensions/combined/_locales/ru/messages.json b/Extensions/combined/_locales/ru/messages.json
index 6af9141..c275bf9 100644
--- a/Extensions/combined/_locales/ru/messages.json
+++ b/Extensions/combined/_locales/ru/messages.json
@@ -52,5 +52,35 @@
},
"considerDonating": {
"message": "Единственный источник доходов позволяющий расширению продолжать работу - ваши пожертвования. Пожалуйста, поддержите нас и помогите нам развиваться."
+ },
+ "roundNumbers": {
+ "message": "Показывать округленные числа"
+ },
+ "roundNumbersHover": {
+ "message": "Округлить значение счетчика (это параметр YouTube по умолчанию)."
+ },
+ "reformatLikes": {
+ "message": "Форматировать количество лайков"
+ },
+ "reformatLikesHover": {
+ "message": "Делает значение статистики более последовательным."
+ },
+ "numberFormat": {
+ "message": "Числовой формат"
+ },
+ "colorizeRatio": {
+ "message": "Раскрасьте полосу неприязни"
+ },
+ "colorizeRatioHover": {
+ "message": "Раскрасьте полосу неприязни собственными цветами."
+ },
+ "colorizeThumbs": {
+ "message": "Раскрасьте кнопки"
+ },
+ "colorizeThumbsHover": {
+ "message": "Раскрасьте кнопки нравится и не нравится с помощью пользовательских цветов."
+ },
+ "colorTheme": {
+ "message": "Цветовая схема:"
}
}
diff --git a/Extensions/combined/popup.css b/Extensions/combined/popup.css
index dfe94cb..2ff8516 100644
--- a/Extensions/combined/popup.css
+++ b/Extensions/combined/popup.css
@@ -15,7 +15,8 @@ html,
body {
background-color: var(--background);
color: var(--white);
- min-width: 300px;
+ min-width: 310px;
+ min-height: 350px;
padding: 0.5em;
font-family: "Roboto", Arial, Helvetica, sans-serif;
font-size: 14px;
@@ -68,9 +69,12 @@ button:hover {
border-radius: 0.25rem;
}
-.switch:before {
+
+.switch::before, .label-with-hover-tip::before {
content: attr(data-hover);
visibility: hidden;
+ opacity: 0;
+ transition: visibility 0.1s linear, opacity 0.1s linear;
width: 250px;
background-color: var(--secondary);
border-radius: 0.5rem;
@@ -82,8 +86,27 @@ button:hover {
top: 160%;
}
-.switch:hover:before {
+
+.switch:hover::before, .label-with-hover-tip:hover::before {
visibility: visible;
+ opacity: 1;
+}
+
+.fade-in {
+ opacity: 1;
+ animation-name: fadeInOpacity;
+ animation-iteration-count: 1;
+ animation-timing-function: ease-in;
+ animation-duration: 2s;
+}
+
+@keyframes fadeInOpacity {
+ 0% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
}
#advancedToggle {
@@ -123,6 +146,32 @@ button:hover {
border: 2px solid var(--secondary);
border-radius: 0.5rem;
padding: 1rem;
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+::-webkit-scrollbar {
+ width: 1rem;
+}
+
+::-webkit-scrollbar-track {
+ background: #111; /* color of the tracking area */
+}
+
+::-webkit-scrollbar-thumb {
+ background-color: #333; /* color of the scroll thumb */
+ border-radius: 1rem 0 0 1rem; /* roundness of the scroll thumb */
+ border-bottom: 0.25rem solid #111; /* creates padding around scroll thumb */
+ border-left: 0.25rem solid #111; /* creates padding around scroll thumb */
+ border-top: 0.25rem solid #111; /* creates padding around scroll thumb */
+}
+
+::-webkit-scrollbar-thumb:hover {
+ background-color: #f22; /* color of the scroll thumb */
+ border-radius: 1rem 0 0 1rem; /* roundness of the scroll thumb */
+ border-bottom: 0.25rem solid #111; /* creates padding around scroll thumb */
+ border-left: 0.25rem solid #111; /* creates padding around scroll thumb */
+ border-top: 0.25rem solid #111; /* creates padding around scroll thumb */
}
#advancedLegend {
@@ -142,6 +191,14 @@ button:hover {
margin-bottom: 1rem;
}
+.label-with-hover-tip {
+ position: relative;
+ display: inline-block;
+ width: 80px;
+ height: 17px;
+ margin-bottom: 1rem;
+}
+
.switch:last-of-type {
margin-bottom: 0;
}
@@ -162,7 +219,7 @@ button:hover {
border-radius: 34px;
}
-.slider:before {
+.slider::before {
position: absolute;
content: "";
height: 13px;
@@ -178,7 +235,7 @@ input:checked + .slider {
background: var(--accent);
}
-input:checked + .slider:before {
+input:checked + .slider::before {
transform: translateX(13px);
background: var(--primary);
}
diff --git a/Extensions/combined/popup.html b/Extensions/combined/popup.html
index 7d39246..8318901 100644
--- a/Extensions/combined/popup.html
+++ b/Extensions/combined/popup.html
@@ -44,7 +44,7 @@
</button>
<br>
<button style="margin-top: 0.3em" id="link_changelog" title="__MSG_linkChangelog__">
- Change Log
+ __MSG_linkChangelog__
</button>
<br/>
@@ -94,28 +94,28 @@
__MSG_legendSettings__
</legend>
- <label class="switch" data-hover="__MSG_textSettingsHover__">
+ <label class="switch" data-hover="Stop counting your likes and dislikes">
<input type="checkbox" id="disable_vote_submission"/>
- <span class="slider"/>
- <span class="switchLabel" title="__MSG_textSettings__"
- >__MSG_textSettings__</span
- >
+ <span class="slider" />
+ <span class="switchLabel" title="__MSG_textSettings__">
+ __MSG_textSettings__
+ </span>
</label>
<br/>
- <label class="switch" data-hover="Round down numbers (default YouTube behavior)">
+ <label class="switch" data-hover="__MSG_roundNumbersHover__">
<input type="checkbox" id="number_round_down"/>
- <span class="slider"/>
- <span class="switchLabel">Show rounded down numbers</span>
+ <span class="slider" />
+ <span class="switchLabel">__MSG_roundNumbers__</span>
</label>
<br/>
- <label class="switch" data-hover="Make likes and dislikes format consistent">
+ <label class="switch" data-hover="__MSG_reformatLikesHover__">
<input type="checkbox" id="number_reformat_likes"/>
- <span class="slider"/>
- <span class="switchLabel">Re-format like numbers</span>
+ <span class="slider" />
+ <span class="switchLabel">__MSG_reformatLikes__</span>
</label>
<br/>
<div class="custom-select">
- <label for="number_format">Number format:</label>
+ <label for="number_format">__MSG_numberFormat__</label>
<select name="number_format" id="number_format">
<option value="compactShort" id="number_format_compactShort"></option>
<option value="compactLong" id="number_format_compactLong"></option>
@@ -124,26 +124,24 @@
</div>
<br/>
<div class="custom-select">
- <label class="switch" data-hover="Use custom colors for ratio bar.">
+ <label class="switch" data-hover="__MSG_colorizeRatioHover__">
<input type="checkbox" id="colored_bar"/>
- <span class="slider"/>
- <span class="switchLabel">Colorize ratio bar</span>
+ <span class="slider" />
+ <span class="switchLabel">__MSG_colorizeRatio__</span>
</label>
</div>
- <label class="switch" data-hover="Use custom colors for thumb icons.">
+ <label class="switch" data-hover="__MSG_colorizeThumbsHover__">
<input type="checkbox" id="colored_thumbs"/>
- <span class="slider"/>
- <span class="switchLabel">Colorize thumbs</span>
+ <span class="slider" />
+ <span class="switchLabel">__MSG_colorizeThumbs__</span>
</label>
<br/>
<div class="custom-select">
- <label for="color_theme">Color theme:</label>
+ <label for="color_theme">__MSG_colorTheme__</label>
<select name="color_theme" id="color_theme">
- <option value="classic" id="color_theme_classic">Classic</option>
- <option value="accessible" id="color_theme_accessible">
- Accessible
- </option>
- <option value="neon" id="color_theme_neon">Neon</option>
+ <option value="classic" id="color_theme_classic">"__MSG_textColorTheme1__"</option>
+ <option value="accessible" id="color_theme_accessible">"__MSG_textColorTheme2__"</option>
+ <option value="neon" id="color_theme_neon">"__MSG_textColorTheme3__"</option>
</select>
<span
id="color_theme_example_like"
@@ -153,8 +151,7 @@
width: 1em;
height: 1em;
"
- >&nbsp;</span
- >
+ >&nbsp;</span>
<span
id="color_theme_example_dislike"
style="
@@ -163,8 +160,23 @@
width: 1em;
height: 1em;
"
- >&nbsp;</span
- >
+ >&nbsp;</span>
+ </div>
+ <br/>
+ <label class="switch" data-hover="Display percentage in like/dislike bar tooltip.">
+ <input type="checkbox" id="show_tooltip_percentage"/>
+ <span class="slider"/>
+ <span class="switchLabel">Percentage in like/dislike bar tooltip.</span>
+ </label>
+ <div class="custom-select">
+ <label for="tooltip_percentage_mode" data-hover="Use custom percentage display on hover.">Percent mode:</label>
+ <select name="tooltip_percentage_mode" id="tooltip_percentage_mode">
+ <option value="dash_like" id="tooltip_percentage_mode_dash_like">190&nbsp;/&nbsp;10&nbsp;&nbsp;-&nbsp;&nbsp;95%</option>
+ <option value="dash_dislike" id="tooltip_percentage_mode_dash_dislike">190&nbsp;/&nbsp;10&nbsp;&nbsp;-&nbsp;&nbsp;5%</option>
+ <option value="both" id="tooltip_percentage_mode_both">95%&nbsp;/&nbsp;5%</option>
+ <option value="only_like" id="tooltip_percentage_mode_only_like">95%</option>
+ <option value="only_dislike" id="tooltip_percentage_mode_only_dislike">5%</option>
+ </select>
</div>
</fieldset>
</body>
diff --git a/Extensions/combined/popup.js b/Extensions/combined/popup.js
index 2fb0db7..30741dd 100644
--- a/Extensions/combined/popup.js
+++ b/Extensions/combined/popup.js
@@ -1,3 +1,5 @@
+import { cLog } from "./src/utils";
+
/* Config */
const config = {
advanced: false,
@@ -7,7 +9,9 @@ const config = {
colorTheme: "classic",
numberDisplayFormat: "compactShort",
numberDisplayRoundDown: true,
- numberDisplayReformatLikes: false,
+ showTooltipPercentage: false,
+ tooltipPercentageMode: "dash_like",
+ numberDisplayReformatLikes: false,
showAdvancedMessage:
'<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor"><rect fill="none" height="24" width="24"/><path d="M19.5,12c0-0.23-0.01-0.45-0.03-0.68l1.86-1.41c0.4-0.3,0.51-0.86,0.26-1.3l-1.87-3.23c-0.25-0.44-0.79-0.62-1.25-0.42 l-2.15,0.91c-0.37-0.26-0.76-0.49-1.17-0.68l-0.29-2.31C14.8,2.38,14.37,2,13.87,2h-3.73C9.63,2,9.2,2.38,9.14,2.88L8.85,5.19 c-0.41,0.19-0.8,0.42-1.17,0.68L5.53,4.96c-0.46-0.2-1-0.02-1.25,0.42L2.41,8.62c-0.25,0.44-0.14,0.99,0.26,1.3l1.86,1.41 C4.51,11.55,4.5,11.77,4.5,12s0.01,0.45,0.03,0.68l-1.86,1.41c-0.4,0.3-0.51,0.86-0.26,1.3l1.87,3.23c0.25,0.44,0.79,0.62,1.25,0.42 l2.15-0.91c0.37,0.26,0.76,0.49,1.17,0.68l0.29,2.31C9.2,21.62,9.63,22,10.13,22h3.73c0.5,0,0.93-0.38,0.99-0.88l0.29-2.31 c0.41-0.19,0.8-0.42,1.17-0.68l2.15,0.91c0.46,0.2,1,0.02,1.25-0.42l1.87-3.23c0.25-0.44,0.14-0.99-0.26-1.3l-1.86-1.41 C19.49,12.45,19.5,12.23,19.5,12z M12.04,15.5c-1.93,0-3.5-1.57-3.5-3.5s1.57-3.5,3.5-3.5s3.5,1.57,3.5,3.5S13.97,15.5,12.04,15.5z"/></svg>',
hideAdvancedMessage:
@@ -86,6 +90,14 @@ document.getElementById("number_format").addEventListener("change", (ev) => {
chrome.storage.sync.set({ numberDisplayFormat: ev.target.value });
});
+document.getElementById("show_tooltip_percentage").addEventListener("click", (ev) => {
+ chrome.storage.sync.set({ showTooltipPercentage: ev.target.checked });
+});
+
+document.getElementById("tooltip_percentage_mode").addEventListener("change", (ev) => {
+ chrome.storage.sync.set({ tooltipPercentageMode: ev.target.value });
+});
+
document.getElementById("number_reformat_likes").addEventListener("click", (ev) => {
chrome.storage.sync.set({ numberDisplayReformatLikes: ev.target.checked });
});
@@ -99,14 +111,13 @@ advancedToggle.addEventListener("click", () => {
adv.style.pointerEvents = "none";
adv.style.opacity = "0";
advancedToggle.innerHTML = config.showAdvancedMessage;
- config.advanced = false;
} else {
adv.style.transform = "scale(1)";
adv.style.pointerEvents = "auto";
adv.style.opacity = "1";
advancedToggle.innerHTML = config.hideAdvancedMessage;
- config.advanced = true;
}
+ config.advanced = !config.advanced;
});
initConfig();
@@ -119,6 +130,8 @@ function initConfig() {
initializeColorTheme();
initializeNumberDisplayFormat();
initializeNumberDisplayRoundDown();
+ initializeTooltipPercentage();
+ initializeTooltipPercentageMode();
initializeNumberDisplayReformatLikes();
}
@@ -190,6 +203,18 @@ function initializeNumberDisplayRoundDown() {
});
}
+function initializeTooltipPercentage(){
+ chrome.storage.sync.get(["showTooltipPercentage"], (res) => {
+ handleShowTooltipPercentageChangeEvent(res.showTooltipPercentage);
+ });
+};
+
+function initializeTooltipPercentageMode() {
+ chrome.storage.sync.get(["tooltipPercentageMode"], (res) => {
+ handleTooltipPercentageModeChangeEvent(res.tooltipPercentageMode);
+ });
+};
+
function initializeNumberDisplayFormat() {
chrome.storage.sync.get(["numberDisplayFormat"], (res) => {
handleNumberDisplayFormatChangeEvent(res.numberDisplayFormat);
@@ -243,6 +268,9 @@ function storageChangeHandler(changes, area) {
if (changes.numberDisplayFormat !== undefined) {
handleNumberDisplayFormatChangeEvent(changes.numberDisplayFormat.newValue);
}
+ if (changes.showTooltipPercentage !== undefined) {
+ handleShowTooltipPercentageChangeEvent(changes.showTooltipPercentage.newValue);
+ }
if (changes.numberDisplayReformatLikes !== undefined) {
handleNumberDisplayReformatLikesChangeEvent(changes.numberDisplayReformatLikes.newValue);
}
@@ -293,6 +321,22 @@ function handleNumberDisplayFormatChangeEvent(value) {
.querySelector('option[value="' + value + '"]').selected = true;
}
+function handleShowTooltipPercentageChangeEvent(value) {
+ config.showTooltipPercentage = value;
+ document.getElementById("show_tooltip_percentage").checked = value;
+};
+
+function handleTooltipPercentageModeChangeEvent(value) {
+ if (!value) {
+ value = "dash_like";
+ }
+ config.tooltipPercentageMode = value;
+
+ document
+ .getElementById("tooltip_percentage_mode")
+ .querySelector('option[value="' + value + '"]').selected = true;
+};
+
function handleNumberDisplayReformatLikesChangeEvent(value) {
config.numberDisplayReformatLikes = value;
document.getElementById("number_reformat_likes").checked = value;
diff --git a/Extensions/combined/ryd.background.js b/Extensions/combined/ryd.background.js
index 75f22ae..b6b6b67 100644
--- a/Extensions/combined/ryd.background.js
+++ b/Extensions/combined/ryd.background.js
@@ -77,6 +77,8 @@ api.runtime.onInstalled.addListener((details) => {
if (
// No need to show changelog if its was a browser update (and not extension update)
details.reason === "browser_update" ||
+ // Chromium (e.g., Google Chrome Cannary) uses this name instead of the one above for some reason
+ details.reason === "chrome_update" ||
// No need to show changelog if developer just reloaded the extension
details.reason === "update"
)
@@ -277,6 +279,12 @@ function storageChangeHandler(changes, area) {
changes.numberDisplayReformatLikes.newValue
);
}
+ if (changes.showTooltipPercentage !== undefined) {
+ handleShowTooltipPercentageChangeEvent(changes.showTooltipPercentage.newValue);
+ }
+ if (changes.numberDisplayReformatLikes !== undefined) {
+ handleNumberDisplayReformatLikesChangeEvent(changes.numberDisplayReformatLikes.newValue);
+ }
}
function handleDisableVoteSubmissionChangeEvent(value) {
@@ -292,6 +300,17 @@ function handleNumberDisplayFormatChangeEvent(value) {
extConfig.numberDisplayFormat = value;
}
+function handleShowTooltipPercentageChangeEvent(value) {
+ extConfig.showTooltipPercentage = value;
+};
+
+function handleTooltipPercentageModeChangeEvent(value) {
+ if (!value) {
+ value = "dash_like";
+ }
+ extConfig.tooltipPercentageMode = value;
+};
+
function handleNumberDisplayRoundDownChangeEvent(value) {
extConfig.numberDisplayRoundDown = value;
}
@@ -333,6 +352,8 @@ function initExtConfig() {
initializeNumberDisplayFormat();
initializeNumberDisplayRoundDown();
initializeNumberDisplayReformatLikes();
+ initializeTooltipPercentage();
+ initializeTooltipPercentageMode();
}
function initializeDisableVoteSubmission() {
@@ -396,6 +417,26 @@ function initializeNumberDisplayFormat() {
});
}
+function initializeTooltipPercentage() {
+ api.storage.sync.get(["showTooltipPercentage"], (res) => {
+ if (res.showTooltipPercentage === undefined) {
+ api.storage.sync.set({ showTooltipPercentage: false });
+ } else {
+ extConfig.showTooltipPercentage = res.showTooltipPercentage;
+ }
+ });
+}
+
+function initializeTooltipPercentageMode() {
+ api.storage.sync.get(["tooltipPercentageMode"], (res) => {
+ if (res.tooltipPercentageMode === undefined) {
+ api.storage.sync.set({ tooltipPercentageMode: "dash_like" });
+ } else {
+ extConfig.tooltipPercentageMode = res.tooltipPercentageMode;
+ }
+ });
+}
+
function initializeNumberDisplayReformatLikes() {
api.storage.sync.get(["numberDisplayReformatLikes"], (res) => {
if (res.numberDisplayReformatLikes === undefined) {
diff --git a/Extensions/combined/src/bar.js b/Extensions/combined/src/bar.js
index c56ab57..6267ce6 100644
--- a/Extensions/combined/src/bar.js
+++ b/Extensions/combined/src/bar.js
@@ -1,5 +1,5 @@
import { getButtons } from "./buttons";
-import { extConfig, isMobile, isLikesDisabled } from "./state";
+import { extConfig, isMobile, isLikesDisabled, isShorts } from "./state";
import { cLog, getColorFromTheme } from "./utils";
function createRateBar(likes, dislikes) {
@@ -14,49 +14,78 @@ function createRateBar(likes, dislikes) {
const widthPercent =
likes + dislikes > 0 ? (likes / (likes + dislikes)) * 100 : 50;
- if (!rateBar && !isMobile()) {
- let colorLikeStyle = "";
- let colorDislikeStyle = "";
- if (extConfig.coloredBar) {
- colorLikeStyle = "; background-color: " + getColorFromTheme(true);
- colorDislikeStyle = "; background-color: " + getColorFromTheme(false);
- }
+ var likePercentage = parseFloat(widthPercent.toFixed(1));
+ const dislikePercentage = (100 - likePercentage).toLocaleString();
+ likePercentage = likePercentage.toLocaleString();
- (
- document.getElementById("menu-container") ||
- document.querySelector("ytm-slim-video-action-bar-renderer")
- ).insertAdjacentHTML(
- "beforeend",
- `
- <div class="ryd-tooltip" style="width: ${widthPx}px">
- <div class="ryd-tooltip-bar-container">
- <div
- id="ryd-bar-container"
- style="width: 100%; height: 2px;${colorDislikeStyle}"
- >
- <div
- id="ryd-bar"
- style="width: ${widthPercent}%; height: 100%${colorLikeStyle}"
- ></div>
- </div>
- </div>
- <tp-yt-paper-tooltip position="top" id="ryd-dislike-tooltip" class="style-scope ytd-sentiment-bar-renderer" role="tooltip" tabindex="-1">
- <!--css-build:shady-->${likes.toLocaleString()}&nbsp;/&nbsp;${dislikes.toLocaleString()}
- </tp-yt-paper-tooltip>
- </div>
- `
- );
+ if (extConfig.showTooltipPercentage) {
+ var tooltipInnerHTML;
+ switch (extConfig.tooltipPercentageMode) {
+ case "dash_dislike":
+ tooltipInnerHTML = `${likes.toLocaleString()}&nbsp;/&nbsp;${dislikes.toLocaleString()}&nbsp;&nbsp;-&nbsp;&nbsp;${dislikePercentage}%`
+ break;
+ case "both":
+ tooltipInnerHTML = `${likePercentage}%&nbsp;/&nbsp;${dislikePercentage}%`
+ break;
+ case "only_like":
+ tooltipInnerHTML = `${likePercentage}%`
+ break;
+ case "only_dislike":
+ tooltipInnerHTML = `${dislikePercentage}%`
+ break;
+ default: // dash_like
+ tooltipInnerHTML = `${likes.toLocaleString()}&nbsp;/&nbsp;${dislikes.toLocaleString()}&nbsp;&nbsp;-&nbsp;&nbsp;${likePercentage}%`
+ }
} else {
- document.getElementById("ryd-bar-container").style.width = widthPx + "px";
- document.getElementById("ryd-bar").style.width = widthPercent + "%";
- document.querySelector(
- "#ryd-dislike-tooltip > #tooltip"
- ).innerHTML = `${likes.toLocaleString()}&nbsp;/&nbsp;${dislikes.toLocaleString()}`;
- if (extConfig.coloredBar) {
- document.getElementById("ryd-bar-container").style.backgroundColor =
- getColorFromTheme(false);
- document.getElementById("ryd-bar").style.backgroundColor =
- getColorFromTheme(true);
+ tooltipInnerHTML = `${likes.toLocaleString()}&nbsp;/&nbsp;${dislikes.toLocaleString()}`
+ }
+
+
+ if (!isShorts()) {
+ if (!rateBar && !isMobile()) {
+ let colorLikeStyle = "";
+ let colorDislikeStyle = "";
+ if (extConfig.coloredBar) {
+ colorLikeStyle = "; background-color: " + getColorFromTheme(true);
+ colorDislikeStyle = "; background-color: " + getColorFromTheme(false);
+ }
+
+ (
+ document.getElementById("menu-container") ||
+ document.querySelector("ytm-slim-video-action-bar-renderer")
+ ).insertAdjacentHTML(
+ "beforeend",
+ `
+ <div class="ryd-tooltip" style="width: ${widthPx}px">
+ <div class="ryd-tooltip-bar-container">
+ <div
+ id="ryd-bar-container"
+ style="width: 100%; height: 2px;${colorDislikeStyle}"
+ >
+ <div
+ id="ryd-bar"
+ style="width: ${widthPercent}%; height: 100%${colorLikeStyle}"
+ ></div>
+ </div>
+ </div>
+ <tp-yt-paper-tooltip position="top" id="ryd-dislike-tooltip" class="style-scope ytd-sentiment-bar-renderer" role="tooltip" tabindex="-1">
+ <!--css-build:shady-->${tooltipInnerHTML}
+ </tp-yt-paper-tooltip>
+ </div>
+ `
+ );
+ } else {
+ document.getElementById("ryd-bar-container").style.width = widthPx + "px";
+ document.getElementById("ryd-bar").style.width = widthPercent + "%";
+ document.querySelector(
+ "#ryd-dislike-tooltip > #tooltip"
+ ).innerHTML = tooltipInnerHTML;
+ if (extConfig.coloredBar) {
+ document.getElementById("ryd-bar-container").style.backgroundColor =
+ getColorFromTheme(false);
+ document.getElementById("ryd-bar").style.backgroundColor =
+ getColorFromTheme(true);
+ }
}
}
} else {
diff --git a/Extensions/combined/src/events.js b/Extensions/combined/src/events.js
index 99c7d14..019f166 100644
--- a/Extensions/combined/src/events.js
+++ b/Extensions/combined/src/events.js
@@ -8,6 +8,7 @@ import {
extConfig,
storedData,
setLikes,
+ getLikeCountFromButton,
} from "./state";
import { createRateBar } from "./bar";
@@ -41,6 +42,12 @@ function likeClicked() {
createRateBar(storedData.likes, storedData.dislikes);
storedData.previousState = NEUTRAL_STATE;
}
+ if (extConfig.numberDisplayReformatLikes === true) {
+ const nativeLikes = getLikeCountFromButton();
+ if (nativeLikes !== false) {
+ setLikes(numberFormat(nativeLikes));
+ }
+ }
}
}
@@ -65,6 +72,12 @@ function dislikeClicked() {
setDislikes(numberFormat(storedData.dislikes));
createRateBar(storedData.likes, storedData.dislikes);
storedData.previousState = DISLIKED_STATE;
+ if (extConfig.numberDisplayReformatLikes === true) {
+ const nativeLikes = getLikeCountFromButton();
+ if (nativeLikes !== false) {
+ setLikes(numberFormat(nativeLikes));
+ }
+ }
}
}
}
diff --git a/Extensions/combined/src/starRating.js b/Extensions/combined/src/starRating.js
new file mode 100644
index 0000000..5d98814
--- /dev/null
+++ b/Extensions/combined/src/starRating.js
@@ -0,0 +1,101 @@
+import { cLog } from "./utils";
+
+function createStarRating(rating, isMobile) {
+ let starRating = document.createElement('label');
+
+ let starSlider = document.createElement("input");
+ starSlider.setAttribute("class", "rating");
+ starSlider.setAttribute("max", "5");
+ starSlider.setAttribute("readonly", "");
+ starSlider.setAttribute("style", `--fill:rgb(255, 215, 0);--value:${rating.toString()};};background-color: transparent;`);
+ starSlider.setAttribute("type", "range");
+
+ starRating.appendChild(starSlider);
+
+ let YTLikeButton;
+
+ if (isMobile){
+ YTLikeButton = document.querySelector('#app > div.page-container > ytm-watch > ytm-single-column-watch-next-results-renderer > ytm-slim-video-metadata-section-renderer > ytm-slim-video-action-bar-renderer > div > ytm-slim-metadata-toggle-button-renderer:nth-child(1)');
+ } else {
+ YTLikeButton = document.querySelector('#top-level-buttons-computed > ytd-toggle-button-renderer:nth-child(1)');
+ }
+
+ YTLikeButton.insertAdjacentElement('afterend', starRating);
+
+ try {
+ let YTBar = document.querySelector('#ryd-bar-container');
+ YTBar.setAttribute("style", "width: 190%; height: 2px;");
+ }
+ catch(err) {
+ cLog("RateBar Not Present");
+ }
+
+
+
+ let style = `<style>
+
+.rating {
+ --dir: right;
+ --fill: gold;
+ --fillbg: rgba(100, 100, 100, 0.15);
+ --star: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 17.25l-6.188 3.75 1.641-7.031-5.438-4.734 7.172-0.609 2.813-6.609 2.813 6.609 7.172 0.609-5.438 4.734 1.641 7.031z"/></svg>');
+ --stars: 5;
+ --starSize: 2.8rem;
+ --symbol: var(--star);
+ --value: 1;
+ --w: calc(var(--stars) * var(--starSize));
+ --x: calc(100% * (var(--value) / var(--stars)));
+ block-size: var(--starSize);
+ inline-size: var(--w);
+ position: relative;
+ touch-action: manipulation;
+ -webkit-appearance: none;
+}
+
+[dir="rtl"] .rating {
+ --dir: left;
+}
+
+.rating::-moz-range-track {
+ background: linear-gradient(to var(--dir), var(--fill) 0 var(--x), var(--fillbg) 0 var(--x));
+ block-size: 100%;
+ mask: repeat left center/var(--starSize) var(--symbol);
+}
+
+.rating::-webkit-slider-runnable-track {
+ background: linear-gradient(to var(--dir), var(--fill) 0 var(--x), var(--fillbg) 0 var(--x));
+ block-size: 100%;
+ mask: repeat left center/var(--starSize) var(--symbol);
+ -webkit-mask: repeat left center/var(--starSize) var(--symbol);
+}
+
+.rating::-moz-range-thumb {
+ height: var(--starSize);
+ opacity: 0;
+ width: var(--starSize);
+}
+
+.rating::-webkit-slider-thumb {
+ height: var(--starSize);
+ opacity: 0;
+ width: var(--starSize);
+ -webkit-appearance: none;
+}
+
+.rating,
+.rating-label {
+ display: block;
+ font-family: ui-sans-serif, system-ui, sans-serif;
+}
+
+.rating-label {
+ margin-block-end: 1rem;
+}
+
+</style>`;
+
+document.head.insertAdjacentHTML("beforeend", style);
+
+ }
+
+ export { createStarRating };
diff --git a/Extensions/combined/src/state.js b/Extensions/combined/src/state.js
index df9d561..52f68d4 100644
--- a/Extensions/combined/src/state.js
+++ b/Extensions/combined/src/state.js
@@ -8,6 +8,7 @@ import {
getColorFromTheme,
} from "./utils";
import { localize } from "./utils";
+import { createStarRating } from "./starRating";
//TODO: Do not duplicate here and in ryd.background.js
const apiUrl = "https://returnyoutubedislikeapi.com";
@@ -22,6 +23,8 @@ let extConfig = {
colorTheme: "classic",
numberDisplayFormat: "compactShort",
numberDisplayRoundDown: true,
+ showTooltipPercentage: false,
+ tooltipPercentageMode: "dash_like",
numberDisplayReformatLikes: false,
};
@@ -150,10 +153,10 @@ function getLikeCountFromButton() {
if (isShorts()) {
//Youtube Shorts don't work with this query. It's not nessecary; we can skip it and still see the results.
//It should be possible to fix this function, but it's not critical to showing the dislike count.
- return 0;
+ return false;
}
let likesStr = getLikeButton()
- .querySelector("button")
+ .querySelector("yt-formatted-string#text")
.getAttribute("aria-label")
.replace(/\D/g, "");
return likesStr.length > 0 ? parseInt(likesStr) : false;
@@ -199,6 +202,7 @@ function processResponse(response, storedData) {
getDislikeButton().style.color = getColorFromTheme(false);
}
}
+ createStarRating(response.rating, isMobile());
}
// Tells the user if the API is down
@@ -252,6 +256,8 @@ function initExtConfig() {
initializeColorTheme();
initializeNumberDisplayFormat();
initializeNumberDisplayRoundDown();
+ initializeTooltipPercentage();
+ initializeTooltipPercentageMode();
initializeNumberDisplayReformatLikes();
}
@@ -315,6 +321,26 @@ function initializeNumberDisplayFormat() {
});
}
+function initializeTooltipPercentage() {
+ getBrowser().storage.sync.get(["showTooltipPercentage"], (res) => {
+ if (res.showTooltipPercentage === undefined) {
+ getBrowser().storage.sync.set({ showTooltipPercentage: false });
+ } else {
+ extConfig.showTooltipPercentage = res.showTooltipPercentage;
+ }
+ });
+}
+
+function initializeTooltipPercentageMode() {
+ getBrowser().storage.sync.get(["tooltipPercentageMode"], (res) => {
+ if (res.tooltipPercentageMode === undefined) {
+ getBrowser().storage.sync.set({ tooltipPercentageMode: "dash_like" });
+ } else {
+ extConfig.tooltipPercentageMode = res.tooltipPercentageMode;
+ }
+ });
+}
+
function initializeNumberDisplayReformatLikes() {
getBrowser().storage.sync.get(["numberDisplayReformatLikes"], (res) => {
if (res.numberDisplayReformatLikes === undefined) {
diff --git a/Extensions/combined/src/utils.js b/Extensions/combined/src/utils.js
index a3fe790..53a84d0 100644
--- a/Extensions/combined/src/utils.js
+++ b/Extensions/combined/src/utils.js
@@ -9,15 +9,6 @@ function roundDown(num) {
}
function numberFormat(numberState) {
- let userLocales;
- try {
- userLocales = new URL(
- Array.from(document.querySelectorAll("head > link[rel='search']"))
- ?.find((n) => n?.getAttribute("href")?.includes("?locale="))
- ?.getAttribute("href")
- )?.searchParams?.get("locale");
- } catch {}
-
let numberDisplay;
if (extConfig.numberDisplayRoundDown === false) {
numberDisplay = numberState;
@@ -29,22 +20,27 @@ function numberFormat(numberState) {
);
}
-function localize(localeString) {
- return chrome.i18n.getMessage(localeString);
-}
-
function getNumberFormatter(optionSelect) {
- let formatterNotation;
- let formatterCompactDisplay;
let userLocales;
- try {
- userLocales = new URL(
- Array.from(document.querySelectorAll("head > link[rel='search']"))
- ?.find((n) => n?.getAttribute("href")?.includes("?locale="))
- ?.getAttribute("href")
- )?.searchParams?.get("locale");
- } catch {}
+ if (document.documentElement.lang) {
+ userLocales = document.documentElement.lang;
+ } else if (navigator.language) {
+ userLocales = navigator.language;
+ } else {
+ try {
+ userLocales = new URL(
+ Array.from(document.querySelectorAll("head > link[rel='search']"))
+ ?.find((n) => n?.getAttribute("href")?.includes("?locale="))
+ ?.getAttribute("href")
+ )?.searchParams?.get("locale");
+ } catch {
+ cLog('Cannot find browser locale. Use en as default for number formatting.');
+ userLocales = 'en';
+ }
+ }
+ let formatterNotation;
+ let formatterCompactDisplay;
switch (optionSelect) {
case "compactLong":
formatterNotation = "compact";
@@ -61,7 +57,7 @@ function getNumberFormatter(optionSelect) {
}
const formatter = Intl.NumberFormat(
- document.documentElement.lang || userLocales || navigator.language,
+ userLocales,
{
notation: formatterNotation,
compactDisplay: formatterCompactDisplay,
@@ -70,6 +66,10 @@ function getNumberFormatter(optionSelect) {
return formatter;
}
+function localize(localeString) {
+ return chrome.i18n.getMessage(localeString);
+}
+
function getBrowser() {
if (typeof chrome !== "undefined" && typeof chrome.runtime !== "undefined") {
return chrome;
diff --git a/README.md b/README.md
index 3143e67..418d2bc 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
[![Discord](https://img.shields.io/discord/909435648170160229?label=Discord&style=flat&logo=discord)](https://discord.gg/UMxyMmCgfF)
[![License](https://img.shields.io/badge/License-GPLv3-blue.svg?style=flat)](https://github.com/Anarios/return-youtube-dislike/blob/main/LICENSE)
-Read this in other languages: [Español](READMEes.md), [русский](READMEru.md), [Türkçe](READMEtr.md)
+Read this in other languages: [Español](READMEes.md), [русский](READMEru.md), [Français](READMEfr.md), [日本語](READMEja.md), [Türkçe](READMEtr.md)
# Return YouTube Dislike
diff --git a/READMEes.md b/READMEes.md
index 18a706a..e9fc6df 100644
--- a/READMEes.md
+++ b/READMEes.md
@@ -7,47 +7,48 @@
[![Discord](https://img.shields.io/discord/909435648170160229?label=Discord&style=flat&logo=discord)](https://discord.gg/UMxyMmCgfF)
[![License](https://img.shields.io/badge/License-GPLv3-blue.svg?style=flat)](https://github.com/Anarios/return-youtube-dislike/blob/main/LICENSE)
-Leer en otros idiomas: [English](README.md), [русский](READMEru.md), [Türkçe](READMEtr.md)
+
+Leer en otros idiomas: [English](README.md), [русский](READMEru.md), [Français](READMEfr.md) [日本語](READMEja.md), [Türkçe](READMEtr.md)
# Return YouTube Dislike
<p align="center">
- <b>Return YouTube Dislike es una extensión de código abierto que regresa el contador de dislikes.</b><br>
- Disponible para Chrome y Firefox cómo una extensión web.<br>
- También disponible para otros navegadores cómo un Userscript de JS.<br><br>
+ <b>Return YouTube Dislike (recuperar los *dislikes* de YouTube) es una extensión de código abierto que reintroduce el contador de *dislikes* (o «No me gustas»).</b><br>
+ Está disponible para Chrome y Firefox como una extensión web.<br>
+ También está disponible para otros navegadores como un *userscript* de JS.<br><br>
<img width="400px" src="https://user-images.githubusercontent.com/18729296/141743755-2be73297-250e-4cd1-ac93-8978c5a39d10.png"/>
</p>
## La historia
-El 10 de Noviembre de 2021, Google [anunció](https://blog.youtube/news-and-events/update-to-youtube/) que el contador de dislikes de YouTube sería eliminado.
+El 10 de noviembre de 2021, Google [anunció](https://blog.youtube/news-and-events/update-to-youtube/) que eliminarían el contador de *dislikes* de YouTube.
-Adicionalmente, el campo de 'dislike' en la API de YouTube fue [eliminado](https://support.google.com/youtube/thread/134791097/update-to-youtube-dislike-counts) el 13 de Diciembre de 2021, acabando con la habilidad de juzgar la calidad del contenido antes de verlo.
+Adicionalmente, el campo `dislike` de la API de YouTube también fue [eliminado](https://support.google.com/youtube/thread/134791097/update-to-youtube-dislike-counts) el 13 de diciembre de 2021, acabando con la posibilidad de juzgar la calidad de un contenido antes de verlo.
-## Que hace
+## Qué hace
-Con la retirada de las estadísticas de dislikes de la API de YouTube, nuestro *backend* pasó a usar una combinación de las estadísticas de dislikes archivadas y datos extrapolados de los usuarios de la extensión.
+Tras la retirada de las estadísticas de *dislikes* de la API de YouTube, nuestro *backend* pasó a usar una combinación de las estadísticas archivadas de *dislikes* y datos extrapolados de los usuarios de la extensión.
[FAQ](https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/FAQ.md)
## Por qué importa
-Puedes aprender más en nuestro sitio web en: [returnyoutubedislike.com](https://www.returnyoutubedislike.com/)
+Para más información, visita nuestro sitio web: [returnyoutubedislike.com](https://www.returnyoutubedislike.com/)
## Documentación de la API
-El uso de terceros de esta API abierta se permite bajo las siguientes restricciones:
+Se permite el uso de terceros de esta API abierta bajo las siguientes restricciones:
-- **Atribución**: Este proyecto debe estar claramente atribuido con un link a [returnyoutubedislike.com](https://returnyoutubedislike.com/).
-- **Límites de velocidad**: Hay límites de velocidad por cliente de 100 por minuto y 10.000 por día. Excederlos retornará un código de estado *409* indicando que tu aplicación debe bajar la velocidad.
+- **Atribución**: Este proyecto debe estar claramente atribuido con un enlace a [returnyoutubedislike.com](https://returnyoutubedislike.com/).
+- **Límites de velocidad**: Hay límites de velocidad por cliente de 100 solicitudes por minuto y 10.000 al día. Al excederlos se mostrará un código de estado *429*, indicando que tu aplicación debe bajar la velocidad.
-La API es accesible sobre la siguiente URL base:
+La API es accesible a través de la siguiente URL base:
https://returnyoutubedislikeapi.com
La lista de los *endpoints* disponibles se puede consultar aquí:
https://returnyoutubedislikeapi.com/swagger/index.html
-### Obtener votos
+### Obtención de votos
Ejemplo para obtener los votos del ID de un vídeo de YouTube proporcionado:
`/votes?videoId=kxOuG8jMIgI`
@@ -64,25 +65,25 @@ Ejemplo para obtener los votos del ID de un vídeo de YouTube proporcionado:
```
-Un ID de YouTube no existente retornará el codigo de estado *404* "Not Found" (no encontrado).
-Un ID de YouTube mal estructurado retornará *400* "Bad Request" (solicitud incorrecta).
+Un ID de YouTube no existente mostrará el código de estado *404* "Not Found" (no encontrado).
+Un ID de YouTube mal estructurado mostrará el código *400* "Bad Request" (solicitud incorrecta).
<!---
-## API documentation
+## Documentación de la API
-You can view all documentation on our website.
+Puedes ver toda la documentación en nuestra página web.
[https://returnyoutubedislike.com/documentation/](https://returnyoutubedislike.com/documentation/) -->
## Contribuciones
-Por favor, lee la [guía de contribución](https://github.com/Anarios/return-youtube-dislike/blob/main/CONTRIBUTING.md).
+Rogamos que leas la [guía de contribución](https://github.com/Anarios/return-youtube-dislike/blob/main/CONTRIBUTING.md) antes de empezar.
## ¡Apoya este proyecto!
-Puedes apoyar este proyecto donándonos en el enlace inferior:
+Puedes apoyar este proyecto enviando un donativo a través del enlace inferior:
[Donar](https://returnyoutubedislike.com/donate)
@@ -93,4 +94,4 @@ Puedes apoyar este proyecto donándonos en el enlace inferior:
[PocketTube](https://yousub.info/?utm_source=returnyoutubedislike)
-[Hazte nuestro patrocionador](https://www.patreon.com/join/returnyoutubedislike/checkout?rid=8008601)
+[Patrocínanos](https://www.patreon.com/join/returnyoutubedislike/checkout?rid=8008601)
diff --git a/READMEfr.md b/READMEfr.md
new file mode 100644
index 0000000..fc551cc
--- /dev/null
+++ b/READMEfr.md
@@ -0,0 +1,96 @@
+[![Chrome Web Store](https://img.shields.io/chrome-web-store/stars/gebbhagfogifgggkldgodflihgfeippi?label=Chrome%20Rating&style=flat&logo=google)](https://chrome.google.com/webstore/detail/youtube-dislike-button/gebbhagfogifgggkldgodflihgfeippi/)
+[![Chrome Web Store Users](https://img.shields.io/chrome-web-store/users/gebbhagfogifgggkldgodflihgfeippi?label=Chrome%20Users&style=flat&logo=google)](https://chrome.google.com/webstore/detail/youtube-dislike-button/gebbhagfogifgggkldgodflihgfeippi/)
+[![Mozilla rating](https://img.shields.io/amo/stars/return-youtube-dislikes?label=Firefox%20Rating&style=flat&logo=firefox)](https://addons.mozilla.org/en-US/firefox/addon/return-youtube-dislikes/)
+[![Mozilla downloads](https://img.shields.io/amo/users/return-youtube-dislikes?label=Firefox%20Users&style=flat&logo=firefox)](https://addons.mozilla.org/en-US/firefox/addon/return-youtube-dislikes/)
+[![Commit rate](https://img.shields.io/github/commit-activity/m/Anarios/return-youtube-dislike?label=Commits&style=flat)](https://github.com/Anarios/return-youtube-dislike/commits/main)
+[![Issues](https://img.shields.io/github/issues/Anarios/return-youtube-dislike?style=flat&label=Issues)](https://github.com/Anarios/return-youtube-dislike/issues)
+[![Discord](https://img.shields.io/discord/909435648170160229?label=Discord&style=flat&logo=discord)](https://discord.gg/UMxyMmCgfF)
+[![License](https://img.shields.io/badge/License-GPLv3-blue.svg?style=flat)](LICENSE)
+
+# Return YouTube Dislike
+
+Lisez ceci dans d'autres langues : [English](README.md), [Español](READMEes.md), [русский](READMEru.md), [Türkçe](READMEtr.md)
+
+<p align="center">
+ <b>Return YouTube Dislike est une extension open-source qui ré-affiche les dislikes (pouces rouges) sur YouTube.</b><br>
+ Disponible pour Chrome et Firefox en tant qu'extension Web.<br>
+ Également disponible pour d'autres navigateurs en tant que JS Userscript.<br><br>
+ <img width="400px" src="https://user-images.githubusercontent.com/18729296/141743755-2be73297-250e-4cd1-ac93-8978c5a39d10.png"/>
+</p>
+
+## Le récit des événements
+
+Le 10 novembre 2021, Google [a annoncé](https://blog.youtube/news-and-events/update-to-youtube/) que le compteur de dislike sur YouTube serait supprimé.
+
+En outre, le champ `dislike` de l'API YouTube a été [supprimé](https://support.google.com/youtube/thread/134791097/update-to-youtube-dislike-counts) le 13 décembre 2021, supprimant ainsi toute possibilité de juger de la qualité du contenu d'une vidéo avant de la regarder.
+
+## Ce qu'il fait
+
+Avec la suppression des statistiques du nombre de dislike de l'API YouTube, notre backend est passé à l'utilisation d'une combinaison de statistiques du nombre de dislike scrapé et d'estimations extrapolées à partir des données d'extension des utilisateurs.
+
+[FAQ](Docs/FAQfr.md)
+
+## Pourquoi c'est important
+
+Vous pouvez en savoir plus sur notre site web à l'adresse suivante : [returnyoutubedislike.com](https://www.returnyoutubedislike.com/)
+
+## Documentation de l'API
+
+L'utilisation par des tiers de cette API ouverte est autorisée avec les restrictions suivantes :
+
+- **Attribution**: Ce projet doit être clairement nommé avec un lien vers [returnyoutubedislike.com](https://returnyoutubedislike.com/).
+- **Limitation des requêtes**: Il y a des limites de requêtes par client en place qui sont de 100 requêtes par minute et 10 000 par jour. Nous renverrons un code d'erreur *429* indiquant que votre application devrait se calmer.
+
+L'API est accessible via l'URL de base suivante:
+https://returnyoutubedislikeapi.com
+
+La liste des endpoints est disponible ici:
+https://returnyoutubedislikeapi.com/swagger/index.html
+
+### Obtenir les likes
+Exemple pour obtenir les likes d'une vidéo YouTube avec un ID donné:
+`/votes?videoId=kxOuG8jMIgI`
+
+```json
+{
+ "id": "kxOuG8jMIgI",
+ "dateCreated": "2021-12-20T12:25:54.418014Z",
+ "likes": 27326,
+ "dislikes": 498153,
+ "rating": 1.212014408444885,
+ "viewCount": 3149885,
+ "deleted": false
+}
+```
+
+
+Si aucunne vidéo YouTube à cet ID, il sera retourner le code d'erreur *404* "Not Found".
+Un ID YouTube invilide renverra *400* "Bad Request".
+
+
+
+<!---
+## Documentation de l'API
+
+Vous pouvez consulter toute la documentation sur notre site web.
+[https://returnyoutubedislike.com/docs](https://returnyoutubedislike.com/docs) -->
+
+
+## Contribution
+
+Veuillez lire le [guide des contributions](CONTRIBUTINGfr.md).
+
+## Soutenez ce projet !
+
+Vous pouvez soutenir ce projet en faisant un don grâce au lien ci-dessous :
+
+[Donner](https://returnyoutubedislike.com/donate)
+
+## Sponsors
+[Piepacker](https://piepacker.com)
+
+[Seed4.Me VPN](https://www.seed4.me/users/register?gift=ReturnYoutubeDislike)
+
+[PocketTube](https://yousub.info/?utm_source=returnyoutubedislike)
+
+[Devenez notre sponsor](https://www.patreon.com/join/returnyoutubedislike/checkout?rid=8008601)
diff --git a/READMEja.md b/READMEja.md
new file mode 100644
index 0000000..f10b0fa
--- /dev/null
+++ b/READMEja.md
@@ -0,0 +1,99 @@
+[![Chrome Web Store](https://img.shields.io/chrome-web-store/stars/gebbhagfogifgggkldgodflihgfeippi?label=Chrome%20Rating&style=flat&logo=google)](https://chrome.google.com/webstore/detail/youtube-dislike-button/gebbhagfogifgggkldgodflihgfeippi/)
+[![Chrome Web Store Users](https://img.shields.io/chrome-web-store/users/gebbhagfogifgggkldgodflihgfeippi?label=Chrome%20Users&style=flat&logo=google)](https://chrome.google.com/webstore/detail/youtube-dislike-button/gebbhagfogifgggkldgodflihgfeippi/)
+[![Mozilla rating](https://img.shields.io/amo/stars/return-youtube-dislikes?label=Firefox%20Rating&style=flat&logo=firefox)](https://addons.mozilla.org/en-US/firefox/addon/return-youtube-dislikes/)
+[![Mozilla downloads](https://img.shields.io/amo/users/return-youtube-dislikes?label=Firefox%20Users&style=flat&logo=firefox)](https://addons.mozilla.org/en-US/firefox/addon/return-youtube-dislikes/)
+[![Commit rate](https://img.shields.io/github/commit-activity/m/Anarios/return-youtube-dislike?label=Commits&style=flat)](https://github.com/Anarios/return-youtube-dislike/commits/main)
+[![Issues](https://img.shields.io/github/issues/Anarios/return-youtube-dislike?style=flat&label=Issues)](https://github.com/Anarios/return-youtube-dislike/issues)
+[![Discord](https://img.shields.io/discord/909435648170160229?label=Discord&style=flat&logo=discord)](https://discord.gg/UMxyMmCgfF)
+[![License](https://img.shields.io/badge/License-GPLv3-blue.svg?style=flat)](https://github.com/Anarios/return-youtube-dislike/blob/main/LICENSE)
+
+別の言語: [English](README.md), [Español](READMEes.md), [русский](READMEru.md), [Türkçe](READMEtr.md)
+
+# Return YouTube Dislike
+
+<p align="center">
+ <b>Return YouTube DislikeはYouTubeの低評価を表示するためのオープンソースな拡張機能です。</b><br>
+ ChromeとFireFoxで拡張機能を利用可能です。<br>
+ また、他のブラウザでもJS Userscriptを利用できます。<br><br>
+ <img width="400px" src="https://user-images.githubusercontent.com/18729296/141743755-2be73297-250e-4cd1-ac93-8978c5a39d10.png"/>
+</p>
+
+## これまでの経緯
+
+2021年10月10日、GoogleはYouTubeの低評価を非表示にすると[発表しました](https://blog.youtube/news-and-events/update-to-youtube/)。
+
+そして2021年12月13日、YouTube APIからも低評価が[削除]((https://support.google.com/youtube/thread/134791097/update-to-youtube-dislike-counts))され、動画のクオリティを判断する手段がなくなってしまいました。
+
+## What it Does
+
+<!-- この部分の翻訳が微妙? -->
+
+YouTube APIから低評価が削除されたことにより、バックエンドは拡張機能のユーザーをもとにスクレイピングされたデータと組み合わせて表示するように切り替わりました
+
+[FAQ](https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/FAQ.md)
+
+## 低評価が重要な理由
+
+ウェブサイトに詳細が書かれています: [returnyoutubedislike.com](https://www.returnyoutubedislike.com/)
+
+## API ドキュメント
+
+サードパーティは以下の制限のもとでAPIを利用できます:
+
+- **帰属**: [returnyoutubedislike.com](https://returnyoutubedislike.com/) へのリンクを明確に表記してください。
+- **レート制限**: クライアントごとに1分あたり100回、1日あたり10000回という制限があります。制限に達すると*429*コードが返されます。
+
+APIは以下のBase URLでアクセスできます:
+https://returnyoutubedislikeapi.com
+
+利用可能なエンドポイントはこちらを参照してください:
+https://returnyoutubedislikeapi.com/swagger/index.html
+
+### 評価を取得
+APIを利用してYouTube video IDから評価を取得する例です:
+`/votes?videoId=kxOuG8jMIgI`
+
+```json
+{
+ "id": "kxOuG8jMIgI",
+ "dateCreated": "2021-12-20T12:25:54.418014Z",
+ "likes": 27326,
+ "dislikes": 498153,
+ "rating": 1.212014408444885,
+ "viewCount": 3149885,
+ "deleted": false
+}
+```
+
+
+存在しないYouTube IDの場合 *404* "Not Found" が返されます。
+不正なフォーマットのYouTube IDの場合 *400* "Bad Request"が返されます。
+
+
+
+<!---
+## API ドキュメント
+
+APIの完全なドキュメントは公式サイトを参照してください。
+[https://returnyoutubedislike.com/documentation/](https://returnyoutubedislike.com/documentation/) -->
+
+
+## 貢献する
+
+こちらの[contribution guide](https://github.com/Anarios/return-youtube-dislike/blob/main/CONTRIBUTING.md)を読んでください。
+
+## プロジェクトを支援!
+
+以下のリンクに寄付をしてこのプロジェクトを支援できます:
+
+[寄付](https://returnyoutubedislike.com/donate)
+
+## スポンサー
+[Piepacker](https://piepacker.com)
+
+[Seed4.Me VPN](https://www.seed4.me/users/register?gift=ReturnYoutubeDislike)
+
+[PocketTube](https://yousub.info/?utm_source=returnyoutubedislike)
+
+[Become our sponsor](https://www.patreon.com/join/returnyoutubedislike/checkout?rid=8008601)
+
diff --git a/READMEru.md b/READMEru.md
index 16dd25f..cdd2948 100644
--- a/READMEru.md
+++ b/READMEru.md
@@ -7,7 +7,9 @@
[![Discord](https://img.shields.io/discord/909435648170160229?label=Discord&style=flat&logo=discord)](https://discord.gg/UMxyMmCgfF)
[![License](https://img.shields.io/badge/License-GPLv3-blue.svg?style=flat)](https://github.com/Anarios/return-youtube-dislike/blob/main/LICENSE)
-Прочитать на других языках: [English](README.md), [Español](READMEes.md), [Türkçe](READMEtr.md)
+
+Прочитать на других языках: [English](README.md), [Español](READMEes.md), [Français](READMEfr.md), [日本語](READMEja.md), [Türkçe](READMEtr.md)
+
# Return YouTube Dislike
@@ -22,13 +24,13 @@
10 ноября 2021 года Google [объявили](https://blog.youtube/news-and-events/update-to-youtube/), что счётчик «Не нравится» на YouTube будет удален.
-Кроме того, поле отметок `«Не нравится»` в API YouTube было [удалено]](https://support.google.com/youtube/thread/134791097/update-to-youtube-dislike-counts) 13 декабря 2021 года, удалив любую возможность судить о качестве контента перед просмотром.
+Кроме того, поле отметок `dislike` в API YouTube было [удалено]](https://support.google.com/youtube/thread/134791097/update-to-youtube-dislike-counts) 13 декабря 2021 года, удалив любую возможность судить о качестве контента перед просмотром.
## Как оно работает
С удалением статистики отметок из API YouTube наш сервер переключился на использование комбинации собранной статистики отметок «Не нравится», оценок, экстраполированных из пользовательских данных расширения.
-[ЧаВО (англ.)](https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/FAQ.md)
+[ЧаВО](https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/FAQru.md)
## Почему это важно
@@ -38,8 +40,8 @@
Стороннее использование этого открытого API разрешено со следующими ограничениями:
-- **Атрибуция**: Этот проект должен быть четко атрибутирован со ссылкой на [returnyoutubedislike.com](https://returnyoutubedislike.com/).
-- **Ограничение**: Существуют ограничения скорости для каждого клиента вместо 100 в минуту и 10 000 в день. Это выдаст код ошибки *429*, указывающий на то, что ваше приложение должно быть отключено.
+- **Атрибуция**: Этот проект должен быть чётко описан со ссылкой на [returnyoutubedislike.com](https://returnyoutubedislike.com/).
+- **Ограничение**: Существуют ограничения скорости для каждого клиента - 100 в минуту и 10 000 в день. Это выдаст код ошибки *429*, указывающий на то, что ваше приложение должно быть отключено.
API доступен по следующему основному URL-адресу:
https://returnyoutubedislikeapi.com
@@ -64,8 +66,8 @@ https://returnyoutubedislikeapi.com/swagger/index.html
```
-Ни один существующий идентификатор YouTube не выдаст код ошибки *404* "Не найдено".
-Неправильно сформированный идентификатор YouTube выдаст *400* "Неверный запрос".
+Неверный идентификатор YouTube выдаст код ошибки *404* "Не найдено".
+Неправильно отформатированный идентификатор YouTube выдаст код ошибки *400* "Неверный запрос".
@@ -78,7 +80,7 @@ https://returnyoutubedislikeapi.com/swagger/index.html
## Участие/помощь в разработке
-Пожалуйста, ознакомьтесь с [руководством по внесению вклада в проект (англ.)](https://github.com/Anarios/return-youtube-dislike/blob/main/CONTRIBUTING.md).
+Пожалуйста, ознакомьтесь с [руководством по внесению вклада в проект](https://github.com/Anarios/return-youtube-dislike/blob/main/CONTRIBUTINGru.md).
## Поддержите этот проект!
diff --git a/READMEtr.md b/READMEtr.md
index db27a37..9a1f7ba 100644
--- a/READMEtr.md
+++ b/READMEtr.md
@@ -7,7 +7,7 @@
[![Discord](https://img.shields.io/discord/909435648170160229?label=Discord&style=flat&logo=discord)](https://discord.gg/UMxyMmCgfF)
[![Lisans](https://img.shields.io/badge/License-GPLv3-blue.svg?style=flat)](https://github.com/Anarios/return-youtube-dislike/blob/main/LICENSE)
-Bunu diğer dillerde okuyun: [English](README.md), [Español](READMEes.md), [русский](READMEru.md)
+Bunu diğer dillerde okuyun: [English](README.md), [Español](READMEes.md), [Français](READMEfr.md), [русский](READMEru.md), [日本語](READMEja.md)
# YouTube Dislike Sayısını Geri Getir
diff --git a/Website/_locales/en.ts b/Website/_locales/en.ts
index bbe39db..24af1f5 100644
--- a/Website/_locales/en.ts
+++ b/Website/_locales/en.ts
@@ -27,7 +27,7 @@ export default {
subtitle: 'Third party use of this open API is allowed with the following restrictions:',
bullet1: 'Attribution: ',
bullet1text: 'This project should be clearly attributed with either a link to this repo or a link to returnyoutubedislike.com',
- bullet2: 'Rate Limiting',
+ bullet2: 'Rate Limiting: ',
bullet2text: 'There are per client rate limits in place of 100 per minute and 10,000 per day. This will return a 429 status code indicating that your application should back off',
},
url: {
@@ -77,7 +77,7 @@ export default {
bullet2: 'Why isn\'t the dislike count updating?',
bullet2text: 'Right now video dislikes are cached and they aren\'t updated very frequently. It varies depending on a video\'s popularity but can take anywhere between a few hours and a few days to update.',
bullet3: 'How does this work?',
- bullet3text: 'The extension collects the video ID of the video you are watching, fetches the dislike (and other fields like views, likes etc) using our API. The extension then displays the dislike count and ratio on the page. If you like or dislike a video, that is recorded and sent to the database so an accurate dislike count can be extrapolated.',
+ bullet3text: 'The extension collects the video ID of the video you are watching, and fetches the dislike (and other fields like views, likes etc) using our API. The extension then displays the dislike count and ratio on the page. If you like or dislike a video, that is recorded and sent to the database so an accurate dislike count can be extrapolated.',
bullet4: 'Can I share my dislike count with you?',
bullet4text: 'Coming soon. We are looking into using Oauth or a different read only API with a limited scope so creators can share their dislike counts verifiability.',
bullet5: 'What data do you collect and how is it treated?',
diff --git a/Website/_locales/es.ts b/Website/_locales/es.ts
index 8123781..d881edb 100644
--- a/Website/_locales/es.ts
+++ b/Website/_locales/es.ts
@@ -4,39 +4,39 @@ export default {
...es,
home: {
name: 'Inicio',
- title: 'Regresar los Dislikes de YouTube',
- subtitle: 'Una extensión de navegador y una API que te muestra los dislikes en YouTube',
+ title: 'Return YouTube Dislike',
+ subtitle: 'Una extensión de navegador y una API que muestra el número de «dislikes» («No me gusta») en YouTube',
ukraine: 'Apoya a Ucrania',
sponsors: 'Patrocinadores',
},
install: {
- name: 'Instalar',
+ name: 'Instalación',
title: 'Elige tu plataforma',
subtitle: 'Disponible para Firefox y todos los navegadores Chromium',
title2: 'Otras plataformas',
subtitle2: 'Si tu navegador aún no es compatible, usa este UserScript',
title3: 'Implementaciones de terceros',
- subtitle3: 'No nos hacemos responsables, úsalas bajo tu propio riesgo',
+ subtitle3: 'No nos hacemos responsables, úsalas bajo tu cuenta y riesgo',
},
api: {
name: 'API',
- title: '¡Bienvenido a la documentación oficial de RYD!',
+ title: '¡Te damos la bienvenida a la documentación oficial de RYD!',
subtitle: 'Para empezar, elige una sección del menú.',
rights: {
title: 'Derechos de uso',
- subtitle: 'El uso de terceros de esta API abierta se permite bajo las siguientes restricciones: ',
+ subtitle: 'Se permite el uso de terceros de esta API abierta bajo las siguientes restricciones: ',
bullet1: 'Atribución: ',
- bullet1text: 'El proyecto debe estar claramente atribuido con un link a esta página o a returnyoutubedislike.com',
- bullet2: 'Límites de velocidad',
- bullet2text: 'Hay límites de velocidad por cliente de 100 por minuto y 10.000 por día. Esto regresará un código de estado 409 indicando que tu aplicación debe bajar la velocidad.',
+ bullet1text: 'El proyecto debe estar claramente atribuido con un enlace a este repositorio o a returnyoutubedislike.com',
+ bullet2: 'Límites de velocidad: ',
+ bullet2text: 'Hay límites de velocidad por cliente de 100 solicitudes por minuto y 10.000 al día. Al excederlos se mostrará un código de estado *429*, indicando que tu aplicación debe bajar la velocidad.',
},
url: {
title: 'Información de URL',
- subtitle: 'Esta API es accesible sobre la siguiente URL base: ',
+ subtitle: 'Esta API es accesible a través de la siguiente URL base: ',
},
endpoints: {
- title: 'Endpoints disponibles',
- subtitle: 'La lista de los endpoints disponibles está disponible aquí: ',
+ title: '«Endpoints» disponibles',
+ subtitle: 'La lista de los endpoints disponibles se puede consultar aquí: ',
},
fetching: {
title: 'Tutorial de consulta básica',
@@ -46,56 +46,59 @@ export default {
method: 'Método de la consulta: ',
headers: 'Encabezados: ',
response: 'Respuesta: ',
- error1: 'Un ID de YouTube inválido responderá con el código de estado 404 "Not Found"',
- error2: 'Un ID de YouTube con mal formato responderá con 400 "Bad Request"'
+ error1: 'Un ID de YouTube no existente mostrará el código de estado 404 "Not Found" (no encontrado).',
+ error2: 'Un ID de YouTube mal estructurado mostrará el código 400 "Bad Request" (solicitud incorrecta).'
},
},
help: {
name: 'Ayuda',
title: 'Solución de problemas',
- bullet1: 'Asegúrate de que tienes la última versión de la extensión instalada, ',
- bullet11: 'ahora mismo',
+ bullet1: 'Asegúrate de que tienes instalada la última versión de la extensión, ',
+ bullet11: '',
bullet2: 'Prueba a eliminar la extensión e instalarla de nuevo, después reinicia el navegador (todas las ventanas activas, no solo una pestaña)',
- bullet3: 'Asegúrate de qué este link se abre: ',
+ bullet3: 'Comprueba que puedes abrir este enlace: ',
bullet31: 'deberías ver este texto: ',
- bullet4: 'Si nada de esto funciona, reporta tú problema en',
- bullet41: 'en nuestro',
- bullet4a: 'Dínos tu sistema operativo, nombre del navegador y versión del navegador',
- bullet4b: 'Toma una captura de pantalla de la página con el problema (cómo una página de un vídeo de YouTube) con la consola abierta (pulsa ',
- bullet4b1: ') - captura de pantalla de ejemplo abajo.',
- bullet4c: 'Toma una captura de la página de extensiones de tu navegador con la extensión instalada.',
- bullet4c1: 'Para ver las extensiones pon esto en la barra de dirección: ',
+ bullet4: 'Si nada de esto surte efecto, informa de tu problema (en inglés) en el canal',
+ bullet41: 'de nuestro',
+ bullet4a: 'Dinos cuáles son tu sistema operativo, el nombre y la versión de tu navegador',
+ bullet4b: 'Haz una captura de pantalla de la página que contenga el problema (como una página de un vídeo de YouTube) con la consola abierta (pulsa ',
+ bullet4b1: '). Aquí puedes ver una captura de pantalla de ejemplo:',
+ bullet4c: 'Haz una captura de la página de extensiones de tu navegador con la extensión instalada.',
+ bullet4c1: 'Para ver las extensiones, escribe el siguiente texto en la barra de dirección: ',
firefox: 'para Firefox',
chrome: 'para Chrome, Edge, Brave, Opera, Vivaldi',
},
faq: {
- name: 'FAQ',
- title: 'Preguntas frecuentes',
- subtitle: '¿Sígues teniendo problemas? ¡Sientete libre de unirte a nuestro Discord (en inglés)!',
- bullet1: '¿De dónde saca sus datos la extensión?',
- bullet1text: 'Una combinación de datos archivados antes de que la API oficial de dislikes de YouTube se apagará, y datos estimados basados en los usuarios.',
- bullet2: '¿Por qué no se actualiza el contador de dislikes?',
- bullet2text: 'Ahora mismo los dislikes son guardados y no se actualizan muy frecuentemente. Varia dependiendo de la popularidad de un vídeo pero puede tardar entre unas pocas horas y unos pocos días en actualizarse.',
- bullet3: '¿Cómo funciona esto?',
- bullet3text: 'La extensión recoge el ID del vídeo qué estas viendo, carga los dislikes (y otros campos cómo las visitas, likes, etc) usando nuestra API. Entonces, la extensión muestra los dislikes y el radio en la página. Si le das like o dislike a un vídeo, eso se guarda y se envía a la base de datos para qué un contador de dislikes más acertado pueda ser creado.',
- bullet4: '¿Puedo compartir mi contador de dislikes con vosotros?',
- bullet4text: 'Próximamente. Estamos investigando en usar Oauth o una API diferente de solo lectura con alcance limitado para que los creadores puedan compartir sus contadores de dislikes verificablemente.',
- bullet5: '¿Qué datos guardais y cómo son guardados?',
- bullet5text: 'La extensión solo guarda datos que son estrictamente necesarios para que funcione correctamente, cómo la dirección IP o el ID del vídeo que estas viendo. Tus datos nunca serán vendidos a terceros. Si te gustaría saber más sobre cómo tratamos la seguridad y la privacidad mira nuestra <a href="https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/SECURITY-FAQ.md">security FAQ</a>.',
- bullet6: '¿Cómo funciona la API/Backend?',
- bullet6text: 'El backend usa datos archivados de cuando la API de YouTube seguía proporcionando el contador de dislikes, los votos de usuarios de la extensión y extrapolación. En un futuro cercano permitíremos a los creadores de contenido proporcionar su contador de dislikes de forma fácil y segura y añadíremos datos archivados de ArchiveTeam (4,56 billones de vídeos) en nuestra base de datos. También puedes ver un vídeo al respecto.',
- bullet7: '¿Porque el contador de dislikes dice "DISLIKES DISABLED"?',
- bullet7text: 'A veces, un vídeo subido recientemente puede mostrar "DISLIKES DISABLED" incluso si el creador no lo ha desactivado, esto se debe a la forma en que detectamos si los "dislikes" están desactivados, debería desaparecer en unas horas o al darle like o dislike al vídeo y actualizar la página (con suerte).',
+ name: 'Preguntas',
+ title: 'Preguntas más frecuentes',
+ subtitle: '¿Sigues teniendo problemas? ¡Pásate por nuestro servidor de Discord (en inglés)!',
+ bullet1: '¿De dónde obtiene sus datos la extensión?',
+ bullet1text: 'De una combinación de datos archivados antes de que la API oficial de «dislikes» de YouTube se apagase, extrapolada con las acciones realizadas por los usuarios de la extensión.',
+ bullet2: '¿Por qué no se actualiza el contador de «dislikes»?',
+ bullet2text: 'En la actualidad, las cuentas de «dislikes» se almacenan en una caché y no se actualizan con frecuencia. Esta frecuencia varía dependiendo de la popularidad de un vídeo, pero puede tardar entre unas pocas horas y unos pocos días en actualizarse.',
+ bullet3: '¿Cómo funciona la extensión?',
+ bullet3text: 'La extensión lee el ID del vídeo que estés viendo y carga la cifra de «dislikes» (y otras estadísticas, como visitas, «likes», etc.) a través de nuestra API. Después la extensión muestra el número de «dislikes» y la proporción de «likes»/«dislikes» en la página. Si utilizas los botones de «Me gusta» o «No me gusta» de un vídeo, esa información se guardará y enviará a la base de datos con la que se podrá extrapolar una cuenta de «dislikes» más precisa.',
+ bullet4: '¿Puedo compartir mi contador de «dislikes» con vosotros?',
+ bullet4text: 'Próximamente. Estamos investigando en usar Oauth u otra API de solo lectura con alcance limitado para que los creadores puedan compartir sus contadores de «dislikes» verificablemente.',
+ bullet5: '¿Qué datos almacenáis y cómo son guardados?',
+ bullet5text: 'La extensión almacena únicamente aquellos datos estrictamente necesarios para su buen funcionamiento, cómo la dirección IP o el ID del vídeo que estés viendo. Tus datos nunca serán vendidos a terceros. Si quieres saber más sobre nuestras políticas de seguridad y privacidad, consulta nuestro <a href="https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/SECURITY-FAQ.md">documento de preguntas frecuentes sobre seguridad</a>.',
+ bullet6: '¿Cómo funciona la API y el «backend»?',
+ bullet6text: 'El «backend» utiliza datos archivados de cuando la API de YouTube seguía proporcionando el contador de «dislikes», los votos de usuarios de la extensión y su extrapolación. En un futuro cercano permitiremos que los creadores de contenido puedan proporcionar sus cifras de «dislikes» de forma fácil y segura, e incorporaremos los datos archivados de ArchiveTeam (4.560 millones de vídeos) en nuestra base de datos. También puedes ver un vídeo al respecto.',
+ bullet7: '¿Porque el contador de «dislikes» dice «DISLIKES DESACTIVADOS»?',
+ bullet7text: 'En ocasiones, un vídeo subido recientemente puede mostrar «DISLIKES DESACTIVADOS» aunque su creador no los haya desactivado, esto se debe a la forma en que detectamos si los «dislikes» están desactivados. El mensaje debería desaparecer en unas horas o al darle «like» o «dislike» al vídeo y actualizar la página (con suerte).',
},
donate: {
name: 'Donar',
- subtitle: '¡Puedes apoyar nuestros esfuerzos de mantener el internet libre con una donación!',
+ subtitle: '¡Puedes apoyar nuestros esfuerzos para que Internet siga siendo con un donativo!',
},
links: {
name: 'Enlaces',
- title: 'Links del proyecto',
- subtitle: 'Links al proyecto y sus desarrolladores',
- contact: 'Contactame',
+ title: 'Enlaces del proyecto',
+ subtitle: 'Enlaces del proyecto y sus desarrolladores',
+ contact: 'Contacto',
translators: 'Traductores',
+ coolProjects: 'Proyectos interesantes',
+ sponsorBlockDescription: 'Omite los anuncios integrados en vídeos',
+ filmotDescription: 'Busca vídeos de YouTube a través de sus subtítulos'
},
} \ No newline at end of file
diff --git a/Website/_locales/fr.ts b/Website/_locales/fr.ts
new file mode 100644
index 0000000..51e550b
--- /dev/null
+++ b/Website/_locales/fr.ts
@@ -0,0 +1,104 @@
+import { fr } from 'vuetify/src/locale'
+
+export default {
+ ...fr,
+ home: {
+ name: 'Accueil',
+ title: 'Return YouTube Dislike',
+ subtitle: 'Une extension de navigateur et une API qui vous montre les dislike sur Youtube',
+ ukraine: 'Soutenir l\'Ukraine',
+ sponsors: 'Sponsors',
+ },
+ install: {
+ name: 'Installer',
+ title: 'Choisissez votre Plateforme',
+ subtitle: 'Disponible pour Firefox et tous les navigateurs Chromium',
+ title2: 'Autres platesformes',
+ subtitle2: 'Si votre navigateur n\'est pas encore pris en charge, essayez ce UserScript',
+ title3: 'Implémentations par des tiers',
+ subtitle3: 'Aucune responsabilité de notre part, à utiliser à vos risques et périls.',
+ },
+ api: {
+ name: 'API',
+ title: 'Bienvenue sur la documentation officiel de RYD !',
+ subtitle: 'Pour commencer, sélectionnez une section dans le menu.',
+ rights: {
+ title: 'Droits d\'utilisation',
+ subtitle: 'L\'utilisation par des tiers de cette API ouverte est autorisée avec les restrictions suivantes : ',
+ bullet1: 'Attribution: ',
+ bullet1text: 'Ce projet doit être clairement nommé avec un lien vers soit vers GitHub soit vers returnyoutubedislike.com',
+ bullet2: 'Limites des requêtes',
+ bullet2text: 'Il y a des limites de requêtes par client en place qui sont de 100 requêtes par minute et 10 000 par jour. Nous renverrons un code d\'erreur 429 indiquant que votre application devrait se calmer.',
+ },
+ url: {
+ title: 'Information sur l\'URL',
+ subtitle: 'L\'API est accesible via l\'URL de base suivante : ',
+ },
+ endpoints: {
+ title: 'Endpoints disponibles',
+ subtitle: 'La liste des endpoints disponibles est accesible ici : ',
+ },
+ fetching: {
+ title: 'Tutoriel de base sur la récupération des données',
+ subtitle: 'Exemple pour obtenir les likes d\'une vidéo YouTube avec un ID donné : ',
+ title2: 'Example de requête : ',
+ url: 'URL de la requête : ',
+ method: 'Mode de requête : ',
+ headers: 'En-têtes (headers) : ',
+ response: 'Réponse : ',
+ error1: 'Si aucunne vidéo YouTube à cet ID, il sera retourner le code d\'erreur 404 "Not Found"',
+ error2: 'Un ID YouTube invilide renverra *400* "Bad Request"'
+ },
+ },
+ help: {
+ name: 'Aide',
+ title: 'Dépannage',
+ bullet1: 'Assurez-vous que la dernière version de l\'extension est installée, ',
+ bullet11: 'à l\'heure actuelle',
+ bullet2: 'Essayez de supprimer l\'extension et de la réinstaller, puis redémarrez le navigateur (toutes les fenêtres actives, pas seulement un onglet).',
+ bullet3: 'Assurez-vous que ce lien s\'ouvre : ',
+ bullet31: 'vous devriez voir du texte brut : ',
+ bullet4: 'Si rien de ce qui précède ne vous aide, signalez votre problème sur',
+ bullet41: 'ou sur notre',
+ bullet4a: 'Indiquez-nous votre système d\'exploitation ansi que le nom et la version de votre navigateur',
+ bullet4b: 'Faites une capture d\'écran de la page présentant le problème (par exemple, la page de la vidéo youtube) avec la console ouverte (appuyez sur ',
+ bullet4b1: ') - exemple de capture d\'écran ci-dessous.',
+ bullet4c: 'Faites une capture d\'écran de la page des extensions de votre navigateur avec les extension installée.',
+ bullet4c1: 'Pour voir les extensions, mettez ceci dans la barre d\'adresse : ',
+ firefox: 'pour Firefox',
+ chrome: 'pour Chromium (Chrome, Edge, Brave, Opera, Vivaldi...)',
+ },
+ faq: {
+ name: 'FAQ',
+ title: 'Foire Aux Questions',
+ subtitle: 'Vous avez encore des questions ? N\'hésitez pas à rejoindre notre Discord (en anglais) !',
+ bullet1: 'Où l\'extension obtient-elle ses données ?',
+ bullet1text: 'Une combinaison de données archivées datant d\'avant la fermeture de l\'API officielle de YouTube pour les dislikes, et d\'extrapolation du comportement des utilisateurs.',
+ bullet2: 'Pourquoi le nombre de dislike n\'est-il pas mis à jour ?',
+ bullet2text: 'Actuellement, les dislike des vidéos sont mis en cache et ne sont pas mis à jour très fréquemment. La mise à jour varie en fonction de la popularité de la vidéo, mais peut prendre entre quelques heures et quelques jours.',
+ bullet3: 'Comment cela fonctionne-t-il ?',
+ bullet3text: 'L\'extension collecte l\'ID de la vidéo que vous regardez, récupère les dislike (et d\'autres champs comme les vues, les likes, etc.) en utilisant notre API. L\'extension affiche ensuite le nombre de dislike et le ratio sur la page. Si vous liker ou disliker une vidéo, cela est enregistré et envoyé à la base de données afin qu\'un nombre précis de dislikes puisse être extrapolé.',
+ bullet4: 'Puis-je partager mon compte de dislike avec vous ?',
+ bullet4text: 'Prochainement. Nous envisageons d\'utiliser Oauth ou une autre API en lecture seule avec un champ d\'application limité afin que les créateurs puissent partager leurs compteurs de dislikes de manière vérifiable.',
+ bullet5: 'Quelles sont les données que vous collectez et comment sont-elles traitées ?',
+ bullet5text: 'L\'extension ne collecte que les données strictement nécessaires à son bon fonctionnement, comme l\'adresse IP ou l\'ID de la vidéo que vous regardez. Aucune de vos données ne sera jamais vendue à des tiers. Si vous souhaitez en savoir plus sur la manière dont nous gérons la sécurité et la confidentialité, consultez notre <a href="https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/SECURITY-FAQfr.md">FAQ sur la sécurité</a>.',
+ bullet6: 'Comment fonctionne l\'API / le Backend ?',
+ bullet6text: 'Le backend utilise des données archivées de l\'époque où l\'API Youtube renvoyait encore le nombre de dislike, il utilise aussi le nombre de like/dislike des utilisateurs de l\'extension et une extrapolation. Dans un avenir proche, nous allons permettre aux créateurs de contenu de soumettre leurs nombres de dislike facilement et en toute sécurité et nous allons ajouter les données archivées d\'ArchiveTeam (4,56 milliards de vidéos) à notre base de données actuelle. Vous pouvez également visionner une vidéo sur le sujet.',
+ bullet7: 'Pourquoi le compteur de dislike affiche-t-il "Désactivé par le créateur" ?',
+ bullet7text: 'Parfois, une vidéo récemment publiée peut afficher "Désactivé par le créateur" même si le créateur ne l\'a pas désactivé. Cela est dû à la façon dont nous détectons si les dislikes sont désactivés, cela devrait disparaître dans quelques heures ou en likant ou en dislikant la vidéo et en rafraîchissant la page (avec un peu de chance).',
+ },
+ donate: {
+ name: 'Donner',
+ subtitle: 'Vous pouvez soutenir nos efforts pour que l\'internet reste libre en faisant un don !',
+ },
+ links: {
+ name: 'Liens',
+ title: 'Liens du Projet',
+ subtitle: 'Liens vers le projet et ses développeurs',
+ contact: 'Contactez-moi',
+ translators: 'Traducteurs',
+ coolProjects: 'Projets Cool',
+ sponsorBlockDescription: 'Ignorer les publicités intégrées (sponso) dans la vidéo',
+ filmotDescription: 'Rechercher des vidéos YouTube par sous-titres'
+ },
+}
diff --git a/Website/_locales/ru.ts b/Website/_locales/ru.ts
index e4a0601..28b8fc0 100644
--- a/Website/_locales/ru.ts
+++ b/Website/_locales/ru.ts
@@ -4,8 +4,8 @@ export default {
...ru,
home: {
name: 'Главная',
- title: 'Вернуть YouTube Дизлайки',
- subtitle: 'Расширение для браузера и API, которые показывают вам дизлайки в Youtube',
+ title: 'Вернуть YouTube дизлайки',
+ subtitle: 'Расширение для браузера и API, которые показывают вам отметки «Не нравится» в Youtube',
ukraine: 'Поддержите Украину',
sponsors: 'Спонсоры',
},
@@ -14,7 +14,7 @@ export default {
title: 'Выберите свою платформу',
subtitle: 'Доступно в Firefox и во всех Chromium браузерах',
title2: 'Другие платформы',
- subtitle2: 'Если ваш браузер еще не поддерживается, попробуйте этот пользовательский скрипт',
+ subtitle2: 'Если ваш браузер ещё не поддерживается, попробуйте этот пользовательский скрипт',
title3: 'От других разработчиков',
subtitle3: 'Никакой ответственности с нашей стороны, используйте на свой страх и риск',
},
@@ -26,28 +26,28 @@ export default {
title: 'Права пользования',
subtitle: 'Использование этого открытого API третьими лицами разрешено со следующими ограничениями:',
bullet1: 'Aтрибуция: ',
- bullet1text: 'Этот проект должен быть четко описан либо ссылкой на этот репозиторий, либо ссылкой на returnyoutubedislike.com',
- bullet2: 'Ограничение Скорости',
- bullet2text: 'Существуют ограничения на скорость для каждого клиента - 100 в минуту и 10 000 в день. Это вернет код 429, указывающий на то, что ваше приложение превысило лимит',
+ bullet1text: 'Этот проект должен быть чётко описан либо ссылкой на этот репозиторий, либо ссылкой на returnyoutubedislike.com',
+ bullet2: 'Ограничение',
+ bullet2text: 'Существуют ограничения на скорость для каждого клиента - 100 в минуту и 10 000 в день. Это выдаст код ошибки 429, указывающее на то, что ваше приложение превысило лимит',
},
url: {
title: 'Информация о URL-адресе',
- subtitle: 'API доступен по следующему базовому URL-адресу: ',
+ subtitle: 'API доступен по следующему URL-адресу: ',
},
endpoints: {
- title: 'Доступные Конечные точки',
+ title: 'Доступные конечные точки (эндпоинты)',
subtitle: 'Список доступных конечных точек доступен здесь: ',
},
fetching: {
title: 'Базовое руководство по выборке',
- subtitle: 'Пример получения голосов на заданный видео ID на YouTube ',
+ subtitle: 'Пример получения голосов на заданный видео идентификатор на YouTube ',
title2: 'Пример запроса: ',
url: 'URL-адрес запроса: ',
method: 'Способ запроса: ',
- headers: 'Шапка: ',
+ headers: 'Заголовок: ',
response: 'Ответ: ',
- error1: 'Неверный YouTube ID вернет код состояния 404 "Не найден"',
- error2: 'Неправильно отформатированный YouTube ID вернет 400 "Неверный запрос"'
+ error1: 'Неверный идентификатор YouTube выдаст код ошибки 404 "Не найдено"',
+ error2: 'Неправильно отформатированный идентификатор YouTube выдаст код ошибки 400 "Неверный запрос"'
},
},
help: {
@@ -69,23 +69,23 @@ export default {
chrome: 'для Chrome, Edge, Brave, Opera, Vivaldi',
},
faq: {
- name: 'FAQ',
- title: 'Частые Вопросы',
- subtitle: 'Все еще есть вопросы? Не стесняйтесь заглянуть в наш Дискорд!',
+ name: 'ЧаВО',
+ title: 'Частые вопросы',
+ subtitle: 'Всё ещё есть вопросы? Не стесняйтесь заглянуть в наш Discord!',
bullet1: 'Откуда расширение получает данные?',
- bullet1text: 'Комбинация архивных данных, полученных до закрытия официального YouTube дизлайк API, и экстраполяция поведения пользователей расширения.',
- bullet2: 'Почему количество дизлайков не обновляется?',
- bullet2text: 'На данный момент видео дизлайки кэшируются, и обновляются не очень часто. Это зависит от популярности видео, но обновление может занять от нескольких часов до нескольких дней.',
+ bullet1text: 'Комбинация архивных данных, полученных до закрытия официального API YouTube с отметками «Не нравится», и экстраполяция поведения пользователей расширения.',
+ bullet2: 'Почему количество отметок «Не нравится» не обновляется?',
+ bullet2text: 'На данный момент видео отметки «Не нравится» кэшируются, и обновляются не очень часто. Это зависит от популярности видео, но обновление может занять от нескольких часов до нескольких дней.',
bullet3: 'Как это работает?',
- bullet3text: 'Расширение берет ID видео которое вы смотрите, извлекает количество дизлайков (и другие поля, такие как просмотры, лайки и т.д.) используя наш API. Затем расширение отображает количество дизлайков на странице. Если если вы лайкаете или дизлайкаете видео, это записывается и отправляется в базу данных, чтобы можно было экстраполировать точное количество дизлайков.',
- bullet4: 'Могу я поделиться с вами своим количеством дизлайков?',
- bullet4text: 'Скоро. Мы рассматриваем возможность использования Oauth или другого API, доступного только для чтения, с ограниченной областью действия, чтобы создатели могли делиться своим количеством дизлайков.',
+ bullet3text: 'Расширение берёт идентификатор видео которое вы смотрите, извлекает количество отметок «Не нравится» (и другие поля, такие как просмотры, отметки «Нравится» и т.д.) используя наш API. Затем расширение отображает количество отметок «Не нравится» на странице. Если если вы оставляете отметки «Нравится» или «Не нравится», это записывается и отправляется в базу данных, чтобы можно было экстраполировать точное количество отметок.',
+ bullet4: 'Могу я поделиться с вами своим количеством отметок «Не нравится»?',
+ bullet4text: 'Скоро. Мы рассматриваем возможность использования Oauth или другого API, доступного только для чтения, с ограниченной областью действия, чтобы создатели могли делиться своим количеством отметок «Не нравится».',
bullet5: 'Какие данные вы собираете и как они обрабатываются?',
- bullet5text: 'Расширение собирает только те данные, которые строго необходимы для его правильной работы, такие как IP-адрес или ID видео которое вы смотрите. Ваши данные никогда не будут проданы третьим лицам. Если вы хотите узнать больше о том, как мы обеспечиваем безопасность и конфиденциальность, ознакомьтесь с нашим <a href="https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/SECURITY-FAQ.md">FAQ по безопасности</a>.',
+ bullet5text: 'Расширение собирает только те данные, которые строго необходимы для его правильной работы, такие как IP-адрес или идентификатор видео которое вы смотрите. Ваши данные никогда не будут проданы третьим лицам. Если вы хотите узнать больше о том, как мы обеспечиваем безопасность и конфиденциальность, ознакомьтесь с нашим <a href="https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/SECURITY-FAQru.md">ЧаВО по безопасности</a>.',
bullet6: 'Как работает API/серверная часть?',
- bullet6text: 'Серверная часть использует архивные данные с тех пор, когда YouTube API все еще возвращал количество дизлайков, количество лайков/дизлайков пользователей расширения и экстраполяцию. В ближайшем будущем мы позволим создателям контента легко и безопасно отправлять количество своих дизлайков, и мы добавим архивные данные ArchiveTeam (4,56 миллиарда видео) в нашу текущую базу данных. Вы также можете просмотреть видео на эту тему.',
- bullet7: 'Почему дизлайки показывают \'DISLIKES DISABLED\'?',
- bullet7text: 'Иногда недавно загруженное видео может показывать "DISLIKES DISABLED", это связано с тем как мы определяем отключены ли дизлайки, должно исчезнуть через несколько часов или после лайка или дизлайка видео и обновления страницы (надеюсь).',
+ bullet6text: 'Серверная часть использует архивные данные с тех пор, когда YouTube API всё ещё выдавал количество отметок «Не нравится», количество отметок «Нравится» и «Не нравится» пользователей расширения и экстраполяцию. В ближайшем будущем мы позволим создателям контента легко и безопасно отправлять количество своих отметок «Не нравится», и мы добавим архивные данные ArchiveTeam (4,56 миллиарда видео) в нашу текущую базу данных. Вы также можете просмотреть видео на эту тему.',
+ bullet7: 'Почему счётчик отметок «Не нравится» показывает \'DISLIKES DISABLED\'?',
+ bullet7text: 'Иногда недавно загруженное видео может показывать "DISLIKES DISABLED", это связано с тем как мы определяем отключены ли отметки «Не нравится», и должно исчезнуть через несколько часов или после получения отметки «Нравится» или «Не нравится» и обновления страницы (надеюсь).',
},
donate: {
name: 'Пожертвовать',
@@ -97,7 +97,7 @@ export default {
subtitle: 'Ссылки на проект и его разработчиков',
contact: 'Связаться',
translators: 'Переводчики',
- sponsorBlockDescription: 'Проматывает рекламу встроенную в видео',
+ sponsorBlockDescription: 'Проматывает рекламу, встроенную в видео',
filmotDescription: 'Поиск по субтитрам YouTube'
},
}
diff --git a/Website/_locales/tr.ts b/Website/_locales/tr.ts
index c5986c1..f064e10 100644
--- a/Website/_locales/tr.ts
+++ b/Website/_locales/tr.ts
@@ -81,7 +81,7 @@ export default {
bullet4: 'Dislike sayımı sizinle paylaşabilir miyim?',
bullet4text: 'Çok yakında evet. İçerik üreticilerinin dislike sayıları için doğrulanabilirliğini paylaşabilmeleri amacıyla Oauth ya da sınırlı bir kapsamda farklı bir salt okunur API kullanmayı düşünüyoruz.',
bullet5: 'Hangi verileri topluyorsunuz ve bunlar nasıl işleniyor?',
- bullet5text: 'Uzantı, yalnızca izlediğiniz videonun IP adresi veya videonun ID\'si gibi düzgün çalışması için kesinlikle gerekli olan verileri toplar. Verileriniz asla 3. taraflara satılmayacaktır. Güvenliği ve gizliliği nasıl ele aldığımız hakkında daha fazla bilgi için <a href="https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/SECURITY-FAQ.md">security FAQ</a>'ya gidin.',
+ bullet5text: 'Uzantı, yalnızca izlediğiniz videonun IP adresi veya videonun ID\'si gibi düzgün çalışması için kesinlikle gerekli olan verileri toplar. Verileriniz asla 3. taraflara satılmayacaktır. Güvenliği ve gizliliği nasıl ele aldığımız hakkında daha fazla bilgi için <a href="https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/SECURITY-FAQ.md">security FAQ</a>\'ya gidin.',
bullet6: 'API/Yazılım(Backend) nasıl çalışıyor?',
bullet6text: 'Yazılım, YouTube API\'sinin dislike sayısını ve uzantı kullanıcılarının like/dislike sayısı sonuçların genişletilmesinin döndürmeye devam ettiği zamana ait arşivlenmiş verileri kullanır. Yakın zamanda içerik üreticilerin dislike sayısını kolay ve güvenli bir şekilde göndermelerine izin vereceğiz ve ArchiveTeam\'in arşivlenmiş verilerini (4,56 milyar video) veri tabanımıza ekleyeceğiz. Ayrıca konu ile ilgili videoyu da izleyebilirsiniz.',
bullet7: 'Dislike sayısı neden \'DISLIKES DISABLED\'(DISLIKE\'LAR AKTİF DEĞİL) olarak gözüküyor?',
diff --git a/Website/layouts/default.vue b/Website/layouts/default.vue
index 106c2cb..4d5e195 100644
--- a/Website/layouts/default.vue
+++ b/Website/layouts/default.vue
@@ -105,7 +105,7 @@ export default {
{ name: "Русский", locale: "ru" },
{ name: "Čeština", locale: "cs" },
{ name: "日本語", locale: "ja" },
- // { name: "Français", locale: "fr" },
+ { name: "Français", locale: "fr" },
// { name: "Deutsch", locale: "de" },
// ...
],
diff --git a/Website/nuxt.config.js b/Website/nuxt.config.js
index e024b87..59728bc 100644
--- a/Website/nuxt.config.js
+++ b/Website/nuxt.config.js
@@ -4,7 +4,7 @@ import tr from "./_locales/tr";
import ru from "./_locales/ru";
import cs from "./_locales/cs";
import ja from "./_locales/ja";
-// import fr from "./_locales/fr";
+import fr from "./_locales/fr";
// import de from "./_locales/de";
// ...
export default {
@@ -50,7 +50,8 @@ export default {
// Vuetify module configuration: https://go.nuxtjs.dev/config-vuetify
vuetify: {
lang: {
- locales: { en, es, tr, ru, cs, ja /*, fr, de, ...*/ },
+
+ locales: { en, es, tr, ru, cs, ja, fr, /* de, ...*/ },
current: "en",
},
theme: {
diff --git a/Website/pages/links.vue b/Website/pages/links.vue
index ec58e62..aa38f7f 100644
--- a/Website/pages/links.vue
+++ b/Website/pages/links.vue
@@ -107,6 +107,10 @@ export default {
tag: "ShaCHO36P",
lang: "日本語",
},
+ {
+ tag: "NiniKo",
+ lang: "Français",
+ },
],
coolProjects: [
{ name: "SponsorBlock", url: "https://sponsor.ajay.app/", description: "$vuetify.links.sponsorBlockDescription" },
diff --git a/extension-description-store-french.txt b/extension-description-store-french.txt
new file mode 100644
index 0000000..d4a45d5
--- /dev/null
+++ b/extension-description-store-french.txt
@@ -0,0 +1,20 @@
+Return YouTube Dislike rétablit la possibilité de voir les dislikes sur YouTube.
+
+Si cela ne fonctionne pas : ouvrez l'onglet des extensions (chrome://extensions/) désactivez cette extension et réactivez-la. Il s'agit d'un bug dans Chromium qui casse l'extension dans certains cas. Cela devrait résoudre la plupart des problèmes. Espérons que l'équipe de Chromium corrigera ce problème bientôt.
+
+Depuis le 13 décembre 2021, YouTube a supprimé la possibilité de voir les dislikes de son API.
+Cette extension vise à redonner le pouvoir aux utilisateurs en utilisant une combinaison de données archivées des likes et des dislikes, ainsi que les likes et les dislikes faits par les utilisateurs de l'extension pour montrer les évaluations les plus précises.
+
+Nous disposons à ce jour de plus de 200 millions de vidéos avec leurs données de likes et de dislikes datant d'avant le 13 décembre 2021.
+
+Croissance active et reste à jour avec les uploads datant d'après le 13 décembre 2021.
+
+Plus il y aura d'utilisateurs de l'extension, plus elle sera précise.
+
+Les vidéos impopulaires mises en ligne ultérieurement au 13 décembre 2021 peuvent présenter des données moins précises que les vidéos plus populaires.
+
+Cette extension est actuellement en développement actif, donc si vous rencontrez des problèmes, n'hésitez pas à les signaler sur notre page GitHub ou sur notre serveur Discord.
+
+D'autres fonctionnalités seront bientôt disponibles !
+
+https://github.com/Anarios/return-youtube-dislike
diff --git a/extension-description-store-spanish.txt b/extension-description-store-spanish.txt
new file mode 100644
index 0000000..e6904b7
--- /dev/null
+++ b/extension-description-store-spanish.txt
@@ -0,0 +1,20 @@
+Return YouTube Dislikes restaura la capacidad de ver los «dislikes» («No me gusta»), en YouTube.
+
+En caso de que no funcione: abre la pestaña de Extensiones (chrome://extensions/), desactiva esta extensión y luego vuelve a activarla. Existe un fallo en Chromium que, en algunos casos, da problemas con la extensión. Esta solución debería arreglar la mayoría de los problemas. Con suerte, el equipo de Chromium resolverá el problema pronto.
+
+A partir del 13 de diciembre de 2021, YouTube quitó la capacidad de ver la cantidad de «dislikes» desde su API.
+El fin de esta extensión es el de devolver poder a los usuarios mediante una combinación de datos archivados de cantidades de «likes» («Me gusta») y «dislikes» («No me gusta»), a los que se sumarán los «likes» y «dislikes» enviados por los usuarios de esta extensión, con el fin de mostrar valoraciones precisas.
+
+Actualmente tiene almacenada la información recuperada antes del 13 de diciembre de 2021 de los «likes»/«dislikes» de más de 200 millones de vídeos.
+
+La extensión está creciendo de forma activa y actualizándose con los vídeos subidos después del 13 de diciembre de 2021.
+
+Cuantas más personas utilicen la extensión, más precisa será.
+
+Los vídeos menos populares que se hayan subido después del 13 de diciembre de 2021 podrían mostrar datos menos precisos que los vídeos más populares.
+
+Esta extensión está siendo desarrollada de forma activa: si tienes cualquier problema, no dudes en comentarlo a través de nuestra página de GitHub o en nuestro servidor de Discord (en inglés, por favor).
+
+¡Próximamente incluiremos más características!
+
+https://github.com/Anarios/return-youtube-dislike
diff --git a/extension-description-store.txt b/extension-description-store.txt
index f02403e..198ad6c 100644
--- a/extension-description-store.txt
+++ b/extension-description-store.txt
@@ -1,6 +1,6 @@
Return YouTube Dislike restores the ability to see dislikes on YouTube.
-If it doesn't work: open extensions tab (chrome://extensions/) disable this extension and enable it again. This is a bug in chromium that breaks the extension in some cases. This should fix most of the problems. Hopefully the chromium team will fix this soon.
+If it doesn't work: open the Extensions tab (chrome://extensions/), disable this extension and enable it again. This should fix most of the problems, since there is a bug in Chromium that breaks the extension in some cases. Hopefully the Chromium team will fix this soon.
Starting December 13th 2021, YouTube removed the ability to see dislikes from their API.
This extension aims to restore power to users by using a combination of archived like and dislike data, as well as the likes and dislikes made by extension users to show the most accurate ratings.