Twitter外部翻译器

将第三方翻译添加到推特

当前为 2021-05-14 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Twitter External Translator
  3. // @name:bg Външен преводач на Twitter
  4. // @name:zh Twitter外部翻译器
  5. // @name:zh-CN Twitter外部翻译器
  6. // @name:zh-TW Twitter外部翻译器
  7. // @name:cs Externí překladatel Twitter
  8. // @name:da Twitter ekstern oversætter
  9. // @name:et Twitteri väline tõlkija
  10. // @name:fi Twitter Ulkoinen kääntäjä
  11. // @name:el Εξωτερικός μεταφραστής Twitter
  12. // @name:hu Twitter külső fordító
  13. // @name:lv Twitter Ārējais tulkotājs
  14. // @name:lt "Twitter" išorinis vertėjas
  15. // @name:ro Twitter Traducător extern
  16. // @name:sk Externý prekladateľ Twitter
  17. // @name:sl Twitter Zunanji prevajalec
  18. // @name:sv Twitter Extern översättare
  19. // @name:nl Twitter Externe Vertaler
  20. // @name:fr Traducteur externe Twitter
  21. // @name:de Externer Twitter-Übersetzer
  22. // @name:it Traduttore esterno di Twitter
  23. // @name:ja ツイッター外部翻訳者
  24. // @name:pl Zewnętrzny tłumacz Twittera
  25. // @name:pt Tradutor externo do Twitter
  26. // @name:pt-BR Tradutor externo do Twitter
  27. // @name:ru-RU Twitter Внешний переводчик
  28. // @name:ru Twitter Внешний переводчик
  29. // @name:es Traductor externo de Twitter
  30. // @description Adds 3rd party translators to Twitter
  31. // @description:zh 将第三方翻译添加到推特
  32. // @description:zh-CN 将第三方翻译添加到推特
  33. // @description:zh-TW 將第三方翻譯添加到推特
  34. // @description:bg Добавя преводачи на трети страни в Twitter
  35. // @description:cs Přidává překladatele třetích stran na Twitter
  36. // @description:da Tilføjer tredjepartsoversættere til Twitter
  37. // @description:et Lisab kolmanda osapoole tõlkijad Twitterisse
  38. // @description:fi Lisää kolmannen osapuolen kääntäjiä Twitteriin
  39. // @description:el Προσθέτει μεταφραστές 3ου μέρους στο Twitter
  40. // @description:hu Hozzáadja a 3. féltől származó fordítókat a Twitterhez
  41. // @description:lv Pievieno trešās puses tulkotājus Twitter
  42. // @description:lt Prideda trečiųjų šalių vertėjus į "Twitter
  43. // @description:ro Adaugă traducători de la terțe părți la Twitter
  44. // @description:sk Pridáva prekladateľov tretích strán na Twitter
  45. // @description:sl Dodaja prevajalce tretjih oseb na Twitterju
  46. // @description:sv Lägger till översättare från tredje part till Twitter
  47. // @description:nl Voegt vertalers van derden toe aan Twitter
  48. // @description:fr Ajout de traducteurs tiers à Twitter
  49. // @description:de Fügt Drittanbieter-Übersetzer zu Twitter hinzu
  50. // @description:it Aggiunge traduttori di terze parti a Twitter
  51. // @description:pl Dodaje tłumaczy innych firm do Twittera
  52. // @description:pt Adiciona tradutores de terceiros ao Twitter
  53. // @description:pt-BR Adiciona tradutores de terceiros ao Twitter
  54. // @description:ja サードパーティの翻訳者をツイッターに追加
  55. // @description:ru-RU Добавляет сторонних переводчиков в Twitter
  56. // @description:ru Добавляет сторонних переводчиков в Twitter
  57. // @description:es Añade traductores de terceros a Twitter
  58. // @author Magic of Lolis <magicoflolis@gmail.com>
  59. // @icon https://abs.twimg.com/favicons/twitter.ico
  60. // @version 0.18
  61. // @namespace https://github.com/magicoflolis/userscriptrepo/tree/master/ExternalTranslator#twitter-external-translator
  62. // @homepageURL https://github.com/magicoflolis/userscriptrepo/tree/master/ExternalTranslator#twitter-external-translator
  63. // @supportURL https://github.com/magicoflolis/userscriptrepo/issues/new
  64. // @require https://code.jquery.com/jquery-3.6.0.slim.min.js
  65. // @include https://twitter.com/*
  66. // @include https://tweetdeck.twitter.com/*
  67. // @exclude https://twitter.com/login
  68. // @exclude https://twitter.com/signup
  69. // @exclude https://twitter.com/account
  70. // @exclude https://twitter.com/settings/*
  71. // @exclude https://twitter.com/i/flow/signup
  72. // @grant none
  73. // @inject-into auto
  74. // @run-at document-start
  75. // ==/UserScript==
  76. "use strict";
  77. //#region Config
  78. /**
  79. * You'll need to edit the config manually for now if you're using this
  80. * as a user script.
  81. */
  82. let cfg = {
  83. /** Preferred translator, lowercase only!
  84. * @type {'deepl'|'yandex'|'bing'|'google'|'mymemory'|'translate'} */
  85. translator: ('deepl'),
  86. /** Preferred display
  87. * @type {'text'|'icon'|'text + icon'} */
  88. display: ('text + icon'),
  89. iconWidthA: '16', // Twitter
  90. iconWidthB: '14', // TweetDeck
  91. lang: $("html[lang]").attr("lang"),
  92. debug: false
  93. };
  94. //#endregion
  95. // Web icons are encoded in Data URI.
  96. // Can be decoded: https://www.site24x7.com/tools/datauri-to-image.html
  97. let icons = {
  98. deepl: `<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACNwAAAjcB9wZEwgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGZSURBVDiNjZKxaxRBFMZ/b2ZHbWITUxkRC4PnBUW0k1gkoFlMYmIR8R+w0UZBFAvtLAMS0ipC0guCd0GOa23EJGTPkBRCSCNHKiEgMzvPwmjCuiv3lft97zff7BuhQraWTouJLwE0mmf518a7spwUPxwZvlmLms8B4wWrLZhHPvuwUg44N9afGPcc4T5gK4pFgSUv/jHrre8HgKHJE4nzHWBgn/sZdBuYqQB1Q+5rbLR2DUBy1J89GIbEmNmQNW8DqxWAgcS5IQBT5vqYP3H1Gw9AHyosAKECVA4QuKfIPMhHVKygV4OVU8ByT4BDsiI6rWpusdbYUdgpBpLSMeGTRLYx2o5q9kT0ja2P3xU401ODQJz1neYdVRkT9C1gyob/Ngg/3VbifJf9TVg1L2Q43UC1eo3eb8KfB7O7uRf7T782Yo8hXBG4DFwvaRgFFoP4GTqt7u/bFuTOp5dU9BUw8u/BOhqy5fZ//4HvNL6ErHlNkSmFb4e9YM1WMV+5xjxrvM+P99VBngI/qnK96UI66OrpEhcnThatXx/tiqJJdDA6AAAAAElFTkSuQmCC" class="exIcon"/>`,
  99. yandex: `<img src="data:image/x-icon;base64,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" class="exIcon" />`,
  100. bing: `<img src="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFzSURBVDhPrZDLSwJRGEfnXwiiRURkLnpQlNlUo4usQGgjkdXGhVtXPYiglUS1jTYRLtsVRRC1CMI0qEAokFQssBeRhY8ZTRwzK385w5VupKTQgbO4Z777wR2GRuMUvRpHcoYcy0d7kEJekspDs/eKvNxuKk5y6XDbb6AluXS49dxFSpJLp2ctA1qpdR0Cnc6PO3ngL7pt76CVGuvIQnX0jqaTFGrPYk55sBjsUhq0UlM7P5dbjtNQuhKocoeh9Dy45eFCqOdE0JLMNJ6KqDnnUe0JosN/X/zfqKYToCVZptIdMtfv3EB3dQ1j4LKX5J+0WnjQksxwy0F92+wjFOYb1E34QqaAt/CCBtMzaKWm34i+9K5EwFrDaLY8odZ4W/wJuoVwRGG4gyQ3GeQN9iQGNwX0rfLg5gW0j0fRaX2wk/HfjPiyFWP+LEYvPjDsykBesCVgwCZAuxiHaiquJKPFGfJl2e8FYm5BDP02YZ98/m8Y5gsM/AoQ7XCKzQAAAABJRU5ErkJggg==" class="exIcon"/>`,
  101. google: `<img src="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAfiSURBVFhHxVZpU5RXFuYf5A/ML5iPOvk0qaQ0SiPQ7ITo1MSaZDKpqZiaijERlTRGZGn2fV+CYTRYcQQHARVtLA1EFhuafWug2bdeXrrR1FR85jm3uwHJzHwQq+ZWnTr39vv2fZ7znHPufQNkRGc7D0ZkafHROZ7EmFy3QSyKFiE+m5bp9RFiOZ5vwjO1jwKTNn6j/rzfEV2wdjAyx3U/rvgXnCgHjpcC75cBcbT3xHMdV8x5CRArnuvInC1XcNLSh74t9jeicrT4uOIXiM3bQnSOG9G5HmVRtAhaZA4tm3P6cHqxqEJAb7Rn+rbY34jJ3zIcZ+QxAk4QAY70EYiStQ9cGedhWXxe8IIEHHf1l2Z/69vm1Yfk9n3KK+D+6IWAIkFAiV5UEPAIgisVcp5Dn+H06I1rH/u2efUhxSY598v+X6MnuEQvBMTHFAEhryMNQkAKzg8uYCpigoSke6AzehCYRk87xrVeSIjl/AtRWU5LacN0+rzNemFxcdmwuLiobH5+3mCz2ZT3m6zn5uYSp6enz09OTh70wQcESGtJhfuBJWp9hodF6Ub8tU2U3nWh1uRU/uzVTcTmutXz0Ew3SfyMspYNLM4vQnO54fF4lLndbmxubkLTNOV3z+12O0jCNDs7e0ARkBqQNvPnO5Sbnyx2o+KeC6M2B1wuOzffoNkxMedAWoPGd0gik8oYn+FM9TxMjwcwMT4FRo/l5WUsLS2p+cLCgvL+OZVQc4fDjrm52XOKgF8BiV7yy0MI5Yx2fcOO4WkHqu67kHFLQ227C629TiT9oBHcTQUkJVv4IH8ddU0jGLIMSGQK4H8REBMl+Jthm4AcMFLlwcyxyDw668DIjAMXvtcI4sY7SR4cTfUWn9TCkRSCszZErRA+z7xuhbnXjOHhkW0SK8sksbRDwk9AvKRDasJLgMdsLCtaik5HkOJW5opy15pcJORGEIHO1GlKiZI7mqqF3GYNn1S6FYmjac/wZfUCTI/6MTgwiLGxMYxPTGJwdAyT1mks7QH/FYEwKhBNBUT+o4yu5oGG524H8gjybjJ/Y7SVrAdN28Dymp3528DSqh3GRj4nYR3T8Mf8NVxtGcXI4BCmJibQ2dWDivoGmDq74dhYpxrLypaZmoXFvQTkoqECIq/IXOhT4AoVEHlFgc++3UR2EyOndY85ML/sQNINDUf4vrRqGFPxeeET5FXUobD2OpJLavBxYgYMBVW40tiKbxuaUX79Fq413UPf4LDqEiqyQyCaZ3u4FBUV+LJuU+Vf6iDh+03K7MbbrIG3Lnlw+jt5ZkfPmBN/rXKrlAmBoPSf8d7lpziTWoVv8itxubgaqWW1MFZ8h9PpRfjzxWycy6tE0bUGPDFb4NlLwK+AVHZkthulzPXaurcQq+87kXnLhfI2FyxWB3+3o6jFpVoxmOoEM3qdkd2Qt4qS+l7cvf8QHU96YO63oMfch6zqq7hYVIOOnj6MT01henZWpeBXBKSvxUTyE4VuFpyLbWiHkznXnHaeBw6M8VwoYxGeKGD0VCtEuoAmnaInoa8rLcgn4A/NbbDNzMD0Yyfis0tReb0RczYbC5JFyGJ8iQBPNEOkXK/cSC9HLX0QNw/PclNyDQWMVjqgsEXDV0yPKBQo0vM96RIBDzZush628LdSK+IzqnE2owRNbQ9V9Am55Xj8pBszM9Ns0RkeQHMMxrVThKHp/MopgOppSYHfRFrpisPshEOXvV46QlpvG5zAwWk8K4QA3/2weAO5dR0wZJfh00u5OE//j5Y2TE1OYoLdwTuARGbgdDp3CARTgXAqEEJQJSlVEHCZK1Jch0iuxft+F3CJWoBFgSCajsUaYtSQVjcCY1E1Ij5LwFeZRXj0UzdmeTgJAbEp1oHcByTyHxQgSCjBFKgQkWj3APslF3AFLAQIfixNUvMcf0jrw+mUCiSyG87llKk09LIYZ6xWpYAQWFtbg9Vq9dfAliIQLBHsAnsJlGDbUfskF3AF7AMPEgK8nAIvjiOx5B46Ortwg8X4RXohMir/jm5zP2vAuk2AZLwEuGG8PvcFU/CMgATZDbjLJPJtucX7gelFfvGBXB9NtiOrfpyXE4/moWHcYA18nlaAvCv1GODauleBwNS1A0EpG216fmCE5/M8yGNH5Hr9btPTQsXzmVhI9i8IynjmJUOldFQvkHYohVd01TwePOLlRMAR3gmiRN3N2+jjjSkFubq6ukNARuCl2QO6y+vxumRXYlCK0xDsM5kH+vxu0yVr52LTVsrDzo7YjpwawJFT/Xj3U6+99Zc+nDKace9hP4aGhjA+Po4xkpBLyl+ILynwqsN08+YboXG3ag5H3cWhiAYcCm/E7481IObkP1FR8xDdvRYMj4wqYHVDjntNClEU2K6B/Yzoj24nhP+pHYdjmvF2xG2EfdCKgorH6Ooyw2IZVN8Ho6O8JUe8XtQQBVZWVl4PgbOpD6LiPrljeyfyDo4db4Yxj/dA51P08x4YGBhSBARczKvCuLLXkgIZJpP5jeATrTW64yZcSH4AU3s3+vv6Gf2Ayr8/cjF/KqamJnkcz5PcWLxvm/2NyJONCUnZ3Xj04zCjkyPXqs58fvWqc1++hPxePs1stjmYzQOm9vau3/m22N/44uumA9fq28/39nYn/tTVY3j6tE+ZxWIxDA4OKvPPqUhif//Auba2jjd9f/9/j4CAfwMmlRkjHGFfLAAAAABJRU5ErkJggg==" class="exIcon" />`,
  102. mymemory: `<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAANoAAADaASIXBHgAAAAHdElNRQfiDAMMISYXlTu8AAABNElEQVQoz2XQP0vUcQAG8M/3J2EU1OCqTqZngmBDYosS3mhFQQ0ivYCGewkNgg6CryECEUQXaSiaokGIOGnxQCNpqaAlTgfrgqfh0oqeZ3r+wANPiS7KoIYpwzqamp7moOtXUKqy6sCAdXPmrKtplkYpIPTacmgm/tCIPc+UEJYduvx3HKHPrkYw6sRMKO6aj/BIPcKEI1dYsRHhho+mI9zyTX+ENYuVaa/BsLd5Bdn2wRB47hptU+Gqlx6e7T+2qT+M+1w51sEP311wiouO/cR55ypf1ch7m+pnhVlP8gUD9ivbboOWyVKHct+QffDADjUdIxFuuhNhwWSEMUcGhSV7+v476pKW1e6TPV7YNfFPPKZlSxVd2WNJx5oF4667Z0Pbst74XYhQs+idT9reWDF66v8CC+SUrxqqgPcAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTgtMTItMDNUMTI6MzM6MzgrMDE6MDBxe1dUAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE4LTEyLTAzVDEyOjMzOjM4KzAxOjAwACbv6AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABXelRYdFJhdyBwcm9maWxlIHR5cGUgaXB0YwAAeJzj8gwIcVYoKMpPy8xJ5VIAAyMLLmMLEyMTS5MUAxMgRIA0w2QDI7NUIMvY1MjEzMQcxAfLgEigSi4A6hcRdPJCNZUAAAAASUVORK5CYII=" class="exIcon"/>`,
  103. translate: `<img src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgwIiBoZWlnaHQ9IjEzMCIgdmlld0JveD0iMCAwIDE4MCAxMzAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTY0LjYwMDYgMjIuMzcyMVYxMjkuNjVIMzcuNDY2NVYyMi4zNzIxSDBWMEgxMDIuMTU3VjIyLjM3MjFINjQuNjAwNlpNMTMxLjUwNCA5NS4zOTA0QzE0MS4xNCA4NS42NDkyIDE0OC40NzIgNzMuNjAzOCAxNTMuODE0IDU4LjgzNUgxMDguOTg0QzExNC4xMTYgNzIuODcwNiAxMjEuNTUzIDg1LjIzMDMgMTMxLjUwNCA5NS4zOTA0Wk0xNzguOTUyIDUxLjE4ODdWNTguODM1SDE2Mi44MjJDMTU2LjY0MiA3Ni4wMTI5IDE0OC4zNjcgODkuODM5IDEzNy40NzQgMTAwLjgzN0MxNDguODkxIDExMC40NzMgMTYzLjAzMSAxMTcuNTk2IDE4MCAxMjEuNTc2QzE3OC4xMTQgMTIzLjM1NyAxNzUuNjAxIDEyNi45MTggMTc0LjQ0OCAxMjkuMTE4QzE1Ni45NTYgMTI0LjYxNCAxNDIuNzExIDExNy4wNzIgMTMxLjE5IDEwNi43MDNDMTE5LjY2OCAxMTYuNTQ4IDEwNS41MjcgMTIzLjc3NiA4OC42NjM4IDEyOS4yMjJDODcuOTMwNiAxMjcuMzM3IDg1LjQxNjggMTIzLjU2NiA4My43NDA5IDEyMS43ODZDMTAwLjM5NSAxMTYuOTY3IDExNC4xMTYgMTEwLjI2NCAxMjUuMzI0IDEwMS4wNDZDMTE0LjUzNSA4OS42Mjk1IDEwNi4zNjUgNzUuNDg5MSAxMDAuMzk1IDU4LjgzNUg4NC45OTc4VjUxLjE4ODdIMTI3LjYyOFYzMy40ODcxSDEzNS40ODRWNTEuMTg4N0gxNzguOTUyWiIgZmlsbD0iIzI3QTJGOCIvPgo8L3N2Zz4K" class="exIcon" />`,
  104. },
  105. //#region Languages
  106. en = {
  107. sel: `English (en)`,
  108. tw: `Translate with`,
  109. lg: `Language`,
  110. tr: `Translator`,
  111. ds: `Display`,
  112. ti: `Text + Icon`,
  113. t: `Text`,
  114. i: `Icon`,
  115. s: `Save`,
  116. f: checkTXT
  117. },
  118. zh = {
  119. sel: `中文 (zh)`,
  120. tw: `翻译与`,
  121. lg: `语种`,
  122. tr: `译者`,
  123. ds: `显示`,
  124. ti: `文本+图标`,
  125. t: `案文`,
  126. i: `图标`,
  127. s: `保存`,
  128. f: checkTXT
  129. },
  130. bg = {
  131. sel: "Български (bg)",
  132. tw: "Преведете с",
  133. lg: "Език",
  134. tr: "Преводач",
  135. ds: "Показване на",
  136. ti: "Текст + икона",
  137. t: "Текст",
  138. i: "Икона",
  139. s: "Запазване",
  140. f: checkTXT
  141. },
  142. cs = {
  143. sel: "Česky (cs)",
  144. tw: "Přeložit pomocí",
  145. lg: "Jazyk",
  146. tr: "Překladatel",
  147. ds: "Zobrazit",
  148. ti: "Text + ikona",
  149. t: "Text",
  150. i: "Ikona",
  151. s: "Uložit",
  152. f: checkTXT
  153. },
  154. da = {
  155. sel: "Dansk (da)",
  156. tw: "Oversæt med",
  157. lg: "Sprog",
  158. tr: "Oversætter",
  159. ds: "Vis",
  160. ti: "Tekst + ikon",
  161. t: "Tekst",
  162. i: "Ikon",
  163. s: "Gem",
  164. f: checkTXT
  165. },
  166. et = {
  167. sel: "Eesti (et)",
  168. tw: "Tõlge koos",
  169. lg: "Keel",
  170. tr: "Tõlkija",
  171. ds: "Kuva",
  172. ti: "Tekst + ikoon",
  173. t: "Tekst",
  174. i: "Ikoon",
  175. s: "Salvesta",
  176. f: checkTXT
  177. },
  178. fi = {
  179. sel: "Suomalainen (fi)",
  180. tw: "Käännä kanssa",
  181. lg: "Kieli",
  182. tr: "Kääntäjä",
  183. ds: "Näytä",
  184. ti: "Teksti + kuvake",
  185. t: "Teksti",
  186. i: "Kuvake",
  187. s: "Tallenna",
  188. f: checkTXT
  189. },
  190. el = {
  191. sel: "Ελληνική (el)",
  192. tw: "Μεταφράστε με",
  193. lg: "Γλώσσα",
  194. tr: "Μεταφραστής",
  195. ds: "Εμφάνιση",
  196. ti: "Κείμενο + εικονίδιο",
  197. t: "Κείμενο",
  198. i: "Εικονίδιο",
  199. s: "Αποθήκευση",
  200. f: checkTXT
  201. },
  202. hu = {
  203. sel: "Magyar (hu)",
  204. tw: "Fordítson a",
  205. lg: "Nyelv",
  206. tr: "Fordító",
  207. ds: "Megjelenítés",
  208. ti: "Szöveg + ikon",
  209. t: "Szöveg",
  210. i: "Ikon",
  211. s: "Mentés",
  212. f: checkTXT
  213. },
  214. lv = {
  215. sel: "Latviešu (lv)",
  216. tw: "Tulkot ar",
  217. lg: "Valoda",
  218. tr: "Tulkotājs",
  219. ds: "Displejs",
  220. ti: "Teksts + ikona",
  221. t: "Teksts",
  222. i: "Ikona",
  223. s: "Saglabāt",
  224. f: checkTXT
  225. },
  226. lt = {
  227. sel: "Lietuvių kalba (lt)",
  228. tw: "Išversti su",
  229. lg: "Kalba",
  230. tr: "Vertėjas",
  231. ds: "Rodyti",
  232. ti: "Tekstas + piktograma",
  233. t: "Tekstas",
  234. i: "Ikona",
  235. s: "Išsaugoti",
  236. f: checkTXT
  237. },
  238. ro = {
  239. sel: "Românesc (ro)",
  240. tw: "Tradu cu",
  241. lg: "Limba",
  242. tr: "Traducător",
  243. ds: "Afișați",
  244. ti: "Text + Icoană",
  245. t: "Text",
  246. i: "Icoană",
  247. s: "Salvați",
  248. f: checkTXT
  249. },
  250. sk = {
  251. sel: "Slovenská (sk)",
  252. tw: "Preložiť s",
  253. lg: "Jazyk",
  254. tr: "Prekladateľ",
  255. ds: "Zobraziť",
  256. ti: "Text + ikona",
  257. t: "Text",
  258. i: "Ikona",
  259. s: "Uložiť",
  260. f: checkTXT
  261. },
  262. sl = {
  263. sel: "Slovenski (sl)",
  264. tw: "Prevedi z",
  265. lg: "Jezik",
  266. tr: "Prevajalec",
  267. ds: "Prikaži",
  268. ti: "Besedilo + ikona",
  269. t: "Besedilo",
  270. i: "Ikona",
  271. s: "Shrani",
  272. },
  273. sv = {
  274. sel: "Svenska (sv)",
  275. tw: "Översätt med",
  276. lg: "Språk",
  277. tr: "Översättare",
  278. ds: "Visa",
  279. ti: "Text + ikon",
  280. t: "Text",
  281. i: "Ikon",
  282. s: "Spara",
  283. f: checkTXT
  284. },
  285. nl = {
  286. sel: `Nederlands (nl)`,
  287. tw: `Vertaal met`,
  288. lg: `Taal`,
  289. tr: `Vertaler`,
  290. ds: `Weergave`,
  291. ti: `Tekst + Pictogram`,
  292. t: `Tekst`,
  293. i: `Icoon`,
  294. s: `Save`,
  295. f: checkTXT
  296. },
  297. fr = {
  298. sel: `Français (fr)`,
  299. tw: `Traduire avec`,
  300. lg: `Langue`,
  301. tr: `Traducteur`,
  302. ds: `Afficher`,
  303. ti: `Texte + Icône`,
  304. t: `Texte`,
  305. i: `Icône`,
  306. s: `Sauvez`,
  307. f: checkTXT
  308. },
  309. de = {
  310. sel: `Deutsch (de)`,
  311. tw: bersetzen mit`,
  312. lg: `Sprache`,
  313. tr: bersetzer`,
  314. ds: `Anzeige`,
  315. ti: `Text + Symbol`,
  316. t: `Text`,
  317. i: `Icon`,
  318. s: `Speichern`,
  319. f: checkTXT
  320. },
  321. it = {
  322. sel: `Italiano (it)`,
  323. tw: `Tradurre con`,
  324. lg: `Lingua`,
  325. tr: `Traduttore`,
  326. ds: `Visualizza`,
  327. ti: `Testo + icona`,
  328. t: `Testo`,
  329. i: `Icona`,
  330. s: `Salva`,
  331. f: checkTXT
  332. },
  333. ja = {
  334. sel: `日本語 (ja)`,
  335. tw: `で翻訳する`,
  336. lg: `言語`,
  337. tr: `翻訳者`,
  338. ds: `ディスプレイ`,
  339. ti: `テキスト+アイコン`,
  340. t: `テキスト`,
  341. i: `アイコン`,
  342. s: `保存`,
  343. f: checkTXT
  344. },
  345. pl = {
  346. sel: `Polski (pl)`,
  347. tw: `Tłumaczenie za pomocą`,
  348. lg: `Język`,
  349. tr: `Tłumacz`,
  350. ds: `Wyświetlacz`,
  351. ti: `Tekst + Ikona`,
  352. t: `Tekst`,
  353. i: `Ikona`,
  354. s: `Zapisz`,
  355. f: checkTXT
  356. },
  357. pt = {
  358. sel: `Português (pt)`,
  359. tw: `Traduzir com`,
  360. lg: `Idioma`,
  361. tr: `Tradutora`,
  362. ds: `Mostrar`,
  363. ti: `Texto + Ícone`,
  364. t: `Texto`,
  365. i: cone`,
  366. s: `Guardar`,
  367. f: checkTXT
  368. },
  369. ru = {
  370. sel: `Russisch (ru)`,
  371. tw: `Перевод с`,
  372. lg: `Язык`,
  373. tr: `Переводчик`,
  374. ds: `Показать`,
  375. ti: `Текст + иконка`,
  376. t: `Текст`,
  377. i: `иконка`,
  378. s: `Сохранить`,
  379. f: checkTXT
  380. },
  381. es = {
  382. sel: `Español (es)`,
  383. tw: `Traducir con`,
  384. lg: `Idioma`,
  385. tr: `Traductor`,
  386. ds: `Mostrar`,
  387. ti: `Texto + Icono`,
  388. t: `Texto`,
  389. i: `Icono`,
  390. s: `Guardar`,
  391. f: checkTXT
  392. };
  393. //#endregion
  394. const log = (...args) => {
  395. (cfg.debug) ? console.log('[MoL]', ...args) : false;
  396. },
  397. isHTML = (str, doc = new DOMParser().parseFromString(str, "text/html")) => {
  398. return Array.from(doc.body.childNodes).some(node => node.nodeType === 1);
  399. };
  400.  
  401. function checkTXT() {
  402. return this.tw
  403. }
  404. async function injectTranslationButton() {
  405. let content = '',magicBtn,btContainer,btLang,site,
  406. translateTweet = $("div[lang]").eq(0).siblings().eq(0).children("span"), // "Translate Tweet" button
  407. translateBio = $('div[data-testid="UserDescription"]').eq(0).siblings().eq(0).children("span"), // "Translate Bio" button
  408. trTweet = $("div[lang]").eq(0).siblings().eq(1), // [Tweet] "Translate with ..." button
  409. trBio = $('div[data-testid="UserDescription"]').eq(0).siblings().eq(1), // [Bio] "Translate with ..." button
  410. name = (cfg.translator == 'yandex') ? `Yandex ${icons.yandex}` : (cfg.translator == 'bing') ? `Bing ${icons.bing}` : (cfg.translator == 'google') ? `Google ${icons.google}` : (cfg.translator == 'mymemory') ? `MyMemory ${icons.mymemory}` : (cfg.translator == 'translate') ? `translate.com ${icons.translate}` : `DeepL ${icons.deepl}`,
  411. nIcons = (cfg.translator == 'yandex') ? icons.yandex : (cfg.translator == 'bing') ? icons.bing : (cfg.translator == 'google') ? icons.google : (cfg.translator == 'mymemory') ? icons.mymemory : (cfg.translator == 'translate') ? icons.translate : icons.deepl,
  412. checkDisplay = (cfg.display == 'text') ? icons = { deepl: '', yandex: '', bing: '', google: '', mymemory: '', translate: '' } : (cfg.display == 'icon') ? name = nIcons : false,
  413. tweetbtn = () => {
  414. log("Injecting tweet button")
  415. btContainer = translateTweet.parent().siblings().eq(0), // "Tweet"
  416. btLang = btContainer.attr("lang");
  417. magicBtn = translateTweet.parent().clone().appendTo(translateTweet.parent().parent());
  418. btContainer.children("span").each((index,item) => {
  419. let tweet = $(item).html().trim();
  420. (tweet && tweet != '' && !isHTML(tweet)) ? content += ` ${tweet}` : false;
  421. });
  422. (!btLang) ? btLang = "auto" : false;
  423. (cfg.lang == 'bg') ? magicBtn.html(`${bg.f()} ${name}`) : (cfg.lang == 'cs') ? magicBtn.html(`${cs.f()} ${name}`) : (cfg.lang == 'da') ? magicBtn.html(`${da.f()} ${name}`) : (cfg.lang == 'et') ? magicBtn.html(`${et.f()} ${name}`) : (cfg.lang == 'fi') ? magicBtn.html(`${fi.f()} ${name}`) : (cfg.lang == 'el') ? magicBtn.html(`${el.f()} ${name}`) : (cfg.lang == 'hu') ? magicBtn.html(`${hu.f()} ${name}`) : (cfg.lang == 'lv') ? magicBtn.html(`${lv.f()} ${name}`) : (cfg.lang == 'lt') ? magicBtn.html(`${lt.f()} ${name}`) : (cfg.lang == 'ro') ? magicBtn.html(`${ro.f()} ${name}`) : (cfg.lang == 'sk') ? magicBtn.html(`${sk.f()} ${name}`) : (cfg.lang == 'sl') ? magicBtn.html(`${sl.f()} ${name}`) : (cfg.lang == 'sv') ? magicBtn.html(`${sv.f()} ${name}`) : (cfg.lang == 'zh') ? magicBtn.html(`${zh.f()} ${name}`) : (cfg.lang == 'nl') ? magicBtn.html(`${nl.f()} ${name}`) : (cfg.lang == 'fr') ? magicBtn.html(`${fr.f()} ${name}`) : (cfg.lang == 'de') ? magicBtn.html(`${de.f()} ${name}`) : (cfg.lang == 'it') ? magicBtn.html(`${it.f()} ${name}`) : (cfg.lang == 'ja') ? magicBtn.html(`${ja.f()} ${name}`) : (cfg.lang == 'pl') ? magicBtn.html(`${pl.f()} ${name}`) : (cfg.lang == 'pt') ? magicBtn.html(`${pt.f()} ${name}`) : (cfg.lang == 'ru') ? magicBtn.html(`${ru.f()} ${name}`) : (cfg.lang == 'es') ? magicBtn.html(`${es.f()} ${name}`) : magicBtn.html(`${en.f()} ${name}`);
  424. site = (cfg.translator == 'yandex') ? `https://translate.yandex.com/?lang=${btLang}-${cfg.lang}&text=${content}` : (cfg.translator == 'bing') ? `https://www.bing.com/translator/?text=${content}&from=${btLang}&to=${cfg.lang}` : (cfg.translator == 'google') ? `https://translate.google.com/?q=${content}&sl=${btLang}&tl=${cfg.lang}` : (cfg.translator == 'mymemory') ? `https://mymemory.translated.net/${cfg.lang}/${btLang}/${cfg.lang}/${content}` : (cfg.translator == 'translate') ? `https://www.translate.com/#${btLang}/${cfg.lang}/${content}` : `https://www.deepl.com/translator#${btLang}/${cfg.lang}/${content}`;
  425. magicBtn.hover(function() {
  426. $(this).addClass("r-1ny4l3l r-1ddef8g")
  427. // $(this).css("text-decoration", "underline");
  428. }, function() {
  429. $(this).removeClass("r-1ny4l3l r-1ddef8g")
  430. // $(this).css("text-decoration", "none");
  431. });
  432. magicBtn.on("click", () => {
  433. window.open(`${site}`,'_blank');
  434. })
  435. },
  436. biobtn = () => {
  437. log("Injecting bio button")
  438. btContainer = translateBio.parent().siblings().eq(0); // "User Bio"
  439. btLang = $("div[lang]").attr("lang");
  440. magicBtn = translateBio.parent().clone().appendTo(translateBio.parent().parent());
  441. btContainer.children("span").each((index,item) => {
  442. let bio = $(item).html().trim();
  443. (bio && bio != '' && !isHTML(bio)) ? content += ` ${bio}` : false;
  444. });
  445. (!btLang) ? btLang = "auto" : false;
  446. (cfg.lang == 'bg') ? magicBtn.html(`${bg.f()} ${name}`) : (cfg.lang == 'cs') ? magicBtn.html(`${cs.f()} ${name}`) : (cfg.lang == 'da') ? magicBtn.html(`${da.f()} ${name}`) : (cfg.lang == 'et') ? magicBtn.html(`${et.f()} ${name}`) : (cfg.lang == 'fi') ? magicBtn.html(`${fi.f()} ${name}`) : (cfg.lang == 'el') ? magicBtn.html(`${el.f()} ${name}`) : (cfg.lang == 'hu') ? magicBtn.html(`${hu.f()} ${name}`) : (cfg.lang == 'lv') ? magicBtn.html(`${lv.f()} ${name}`) : (cfg.lang == 'lt') ? magicBtn.html(`${lt.f()} ${name}`) : (cfg.lang == 'ro') ? magicBtn.html(`${ro.f()} ${name}`) : (cfg.lang == 'sk') ? magicBtn.html(`${sk.f()} ${name}`) : (cfg.lang == 'sl') ? magicBtn.html(`${sl.f()} ${name}`) : (cfg.lang == 'sv') ? magicBtn.html(`${sv.f()} ${name}`) : (cfg.lang == 'zh') ? magicBtn.html(`${zh.f()} ${name}`) : (cfg.lang == 'nl') ? magicBtn.html(`${nl.f()} ${name}`) : (cfg.lang == 'fr') ? magicBtn.html(`${fr.f()} ${name}`) : (cfg.lang == 'de') ? magicBtn.html(`${de.f()} ${name}`) : (cfg.lang == 'it') ? magicBtn.html(`${it.f()} ${name}`) : (cfg.lang == 'ja') ? magicBtn.html(`${ja.f()} ${name}`) : (cfg.lang == 'pl') ? magicBtn.html(`${pl.f()} ${name}`) : (cfg.lang == 'pt') ? magicBtn.html(`${pt.f()} ${name}`) : (cfg.lang == 'ru') ? magicBtn.html(`${ru.f()} ${name}`) : (cfg.lang == 'es') ? magicBtn.html(`${es.f()} ${name}`) : magicBtn.html(`${en.f()} ${name}`);
  447. site = (cfg.translator == 'yandex') ? `https://translate.yandex.com/?lang=${btLang}-${cfg.lang}&text=${content}` : (cfg.translator == 'bing') ? `https://www.bing.com/translator/?text=${content}&from=${btLang}&to=${cfg.lang}` : (cfg.translator == 'google') ? `https://translate.google.com/?q=${content}&sl=${btLang}&tl=${cfg.lang}` : (cfg.translator == 'mymemory') ? `https://mymemory.translated.net/${cfg.lang}/${btLang}/${cfg.lang}/${content}` : (cfg.translator == 'translate') ? `https://www.translate.com/#${btLang}/${cfg.lang}/${content}` : `https://www.deepl.com/translator#${btLang}/${cfg.lang}/${content}`;
  448. magicBtn.hover(function() {
  449. $(this).addClass("r-1ny4l3l r-1ddef8g")
  450. // $(this).css("text-decoration", "underline");
  451. }, function() {
  452. $(this).removeClass("r-1ny4l3l r-1ddef8g")
  453. // $(this).css("text-decoration", "none");
  454. });
  455. magicBtn.on("click", () => {
  456. window.open(`${site}`,'_blank');
  457. })
  458. };
  459. let check = (!trBio.length && translateBio.length) ? biobtn() : (!trTweet.length && translateTweet.length) ? tweetbtn() : checkDisplay;
  460. // Resizes icons
  461. if($('.exIcon').length) {
  462. $('.exIcon').attr('width', cfg.iconWidthA);
  463. };
  464. return check
  465. }
  466. async function TweetDeck() {
  467. let content = '',magicBtn,btContainer,btLang,site,
  468. translateTweet = $('a.js-translate-call-to-action'), // "Translate Tweet" button
  469. trTweet = translateTweet.eq(1), // [Tweet] "Translate with ..." button
  470. name = (cfg.translator == 'yandex') ? `Yandex ${icons.yandex}` : (cfg.translator == 'bing') ? `Bing ${icons.bing}` : (cfg.translator == 'google') ? `Google ${icons.google}` : (cfg.translator == 'mymemory') ? `MyMemory ${icons.mymemory}` : (cfg.translator == 'translate') ? `translate.com ${icons.translate}` : `DeepL ${icons.deepl}`,
  471. nIcons = (cfg.translator == 'yandex') ? icons.yandex : (cfg.translator == 'bing') ? icons.bing : (cfg.translator == 'google') ? icons.google : (cfg.translator == 'mymemory') ? icons.mymemory : (cfg.translator == 'translate') ? icons.translate : icons.deepl,
  472. checkDisplay = (cfg.display == 'text') ? icons = { deepl: '', yandex: '', bing: '', google: '', mymemory: '', translate: '' } : (cfg.display == 'icon') ? name = nIcons : false,
  473. tweetbtn = () => {
  474. log("Injecting tweet button")
  475. checkDisplay
  476. // new dis().check()
  477. btContainer = translateTweet.siblings().eq(2), // "Tweet"
  478. content = btContainer.text(), // Content of "Tweet"
  479. btLang = btContainer.attr("lang");
  480. magicBtn = translateTweet.before(translateTweet.clone()); // Create external translation button
  481. (!btLang) ? btLang = "auto" : false;
  482. (cfg.lang == 'bg') ? magicBtn.html(`${bg.f()} ${name}`) : (cfg.lang == 'cs') ? magicBtn.html(`${cs.f()} ${name}`) : (cfg.lang == 'da') ? magicBtn.html(`${da.f()} ${name}`) : (cfg.lang == 'et') ? magicBtn.html(`${et.f()} ${name}`) : (cfg.lang == 'fi') ? magicBtn.html(`${fi.f()} ${name}`) : (cfg.lang == 'el') ? magicBtn.html(`${el.f()} ${name}`) : (cfg.lang == 'hu') ? magicBtn.html(`${hu.f()} ${name}`) : (cfg.lang == 'lv') ? magicBtn.html(`${lv.f()} ${name}`) : (cfg.lang == 'lt') ? magicBtn.html(`${lt.f()} ${name}`) : (cfg.lang == 'ro') ? magicBtn.html(`${ro.f()} ${name}`) : (cfg.lang == 'sk') ? magicBtn.html(`${sk.f()} ${name}`) : (cfg.lang == 'sl') ? magicBtn.html(`${sl.f()} ${name}`) : (cfg.lang == 'sv') ? magicBtn.html(`${sv.f()} ${name}`) : (cfg.lang == 'zh') ? magicBtn.html(`${zh.f()} ${name}`) : (cfg.lang == 'nl') ? magicBtn.html(`${nl.f()} ${name}`) : (cfg.lang == 'fr') ? magicBtn.html(`${fr.f()} ${name}`) : (cfg.lang == 'de') ? magicBtn.html(`${de.f()} ${name}`) : (cfg.lang == 'it') ? magicBtn.html(`${it.f()} ${name}`) : (cfg.lang == 'ja') ? magicBtn.html(`${ja.f()} ${name}`) : (cfg.lang == 'pl') ? magicBtn.html(`${pl.f()} ${name}`) : (cfg.lang == 'pt') ? magicBtn.html(`${pt.f()} ${name}`) : (cfg.lang == 'ru') ? magicBtn.html(`${ru.f()} ${name}`) : (cfg.lang == 'es') ? magicBtn.html(`${es.f()} ${name}`) : magicBtn.html(`${en.f()} ${name}`);
  483. site = (cfg.translator == 'yandex') ? `https://translate.yandex.com/?lang=${btLang}-${cfg.lang}&text=${content}` : (cfg.translator == 'bing') ? `https://www.bing.com/translator/?text=${content}&from=${btLang}&to=${cfg.lang}` : (cfg.translator == 'google') ? `https://translate.google.com/?q=${content}&sl=${btLang}&tl=${cfg.lang}` : (cfg.translator == 'mymemory') ? `https://mymemory.translated.net/${cfg.lang}/${btLang}/${cfg.lang}/${content}` : (cfg.translator == 'translate') ? `https://www.translate.com/#${btLang}/${cfg.lang}/${content}` : `https://www.deepl.com/translator#${btLang}/${cfg.lang}/${content}`;
  484. magicBtn.on("click", () => {
  485. window.open(`${site}`,'_blank');
  486. })
  487. };
  488. let check = (!trTweet.length && translateTweet.length) ? tweetbtn() : trTweet.attr('style', 'display: flex !important; align-items: end !important;');
  489. // Resizes icons
  490. if($('.exIcon').length) {
  491. $('.exIcon').attr('width', cfg.iconWidthB);
  492. };
  493. return check
  494. }
  495. let observer = new MutationObserver(() => {injectTranslationButton()});
  496. let td = new MutationObserver(() => {TweetDeck()});
  497. // Its a headache observing single tweet element, inconsistent load times.
  498. const target = document.querySelector("body"),
  499. init = { subtree: true, characterData: true, childList: true };
  500. (location.host == 'twitter.com') ? observer.observe($(".css-1dbjc4n")[0], {subtree:true,characterData:true,childList:true}) : (location.host == 'tweetdeck.twitter.com') ? td.observe(target, init) : false;