- // ==UserScript==
- // @name Google Translate: Filter & Flags
- // @namespace https://github.com/HatScripts/google-translate-filter-and-flags
- // @version 1.0.2
- // @license MIT
- // @description Filters languages and shows country flags on Google Translate
- // @author HatScripts
- // @icon https://ssl.gstatic.com/translate/favicon.ico
- // @match http://translate.google.com/*
- // @match https://translate.google.com/*
- // @require https://openuserjs.org/src/libs/sizzle/GM_config.js
- // @grant GM_addStyle
- // @grant GM_getValue
- // @grant GM_setValue
- // @grant GM_registerMenuCommand
- // @run-at document-idle
- // ==/UserScript==
-
- /* global GM_config, GM_info, GM_registerMenuCommand */
-
- ;(() => {
- 'use strict'
-
- GM_config.init({
- id: 'gtff_config',
- title: GM_info.script.name + ' Settings',
- fields: {
- SHOW_FLAGS: {
- label: 'Show flags',
- type: 'checkbox',
- default: true,
- title: 'Show country flags next to languages'
- },
- FILTER_LANGUAGES: {
- label: 'Filter languages',
- type: 'checkbox',
- default: true,
- title: 'Show only the specified languages'
- },
- LANGUAGES_SHOWN: {
- label: 'Languages shown',
- type: 'textarea',
- default: 'ar,de,el,en,eo,es,fi,fr,it,ja,ko,la,no,pt,ru,sv,zh-CN',
- title: 'The languages to show, as ISO 639-1 language codes, separated by commas'
- }
- }
- })
-
- GM_registerMenuCommand('Settings', () => {
- GM_config.open()
- })
-
- console.log(GM_info.script.name)
-
- const LANG_MAP = {
- 'iw': 'he', // Hebrew
- 'jw': 'jv', // Javanese
- 'mni-Mtei': 'mni', // Meiteilon (Manipuri)
- 'zh-CN': 'zh', // Chinese (Simplified)
- 'zh-TW': 'zh', // Chinese (Traditional)
- }
-
- const prefix = '.qSb8Pe'
- if (!document.querySelector(prefix)) {
- console.error('Couldn\'t find language buttons')
- }
-
- let css = '/* ' + GM_info.script.name + ' */'
-
- if (GM_config.get('FILTER_LANGUAGES')) {
- css += prefix + '{ display: none; }'
- console.log(GM_config.get('LANGUAGES_SHOWN').split(','))
- css += GM_config.get('LANGUAGES_SHOWN').split(',').map(lang => `${prefix}[data-language-code=${lang}]`).join(',')
- css += '{ display: inline-flex; }'
- css += '.C96yib > .vSUSRc > ' + prefix + ' { display: inline-flex; }'
- }
-
- if (GM_config.get('SHOW_FLAGS')) {
- //css += `${prefix}.RCaXn:not(.KKjvXb) .W5jNxd, ${prefix} .g3XDjb { display: none !important; }`
- css += `${prefix} > .l7O9Dc { background-repeat: no-repeat; background-size: contain; background-position-x: 6px; }`
- css += `${prefix} > .l7O9Dc > i { display: none !important; }`
- document.querySelectorAll(prefix).forEach(wrapper => {
- let code1 = wrapper.dataset.languageCode
- let code2 = LANG_MAP[code1] || code1
- css += `${prefix}[data-language-code=${code1}] > .l7O9Dc {`
- css += `background-image: url(https://hatscripts.github.io/circle-flags/flags/language/${code2}.svg) !important;`
- css += '}'
- })
- }
-
- GM_addStyle(css)
- })()