質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Chrome extension

Chrome拡張機能

Q&A

1回答

766閲覧

GithubでGoogle翻訳から特定の単語群を翻訳させないようにしたい。

Nico

総合スコア0

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Chrome extension

Chrome拡張機能

0グッド

0クリップ

投稿2022/11/17 14:13

編集2022/11/17 16:27

前提

DeepL Code BlockerのようなChrome拡張機能の作り方を教えて欲しいです。

私はDeepL Chrome 拡張機能のヘビーユーザーですが、GitHubでの使い勝手が良くないです。翻訳が不要な単語(例えばFlutter, Goなど)やリポジトリのタイトルまで翻訳してGithubのページを非常に見づらくしてしまいます。
DeepL Code Blocker( https://chrome.google.com/webstore/detail/deepl-code-blocker/blmfehnodbgjheaofcecmjbbapmaikap?hl=ja )のようなChrome拡張機能を開発しようと思っています。

DeepLやGoogle翻訳から特定の単語群を翻訳させないようなアプローチは具体的にはどのように行えばいいでしょうか。私はTypeScriptやJavaScriptはあまり詳しくありません。

deeple code blockerで動いているスクリプト

javascript

1(() => { 2 "use strict"; 3 class e { 4 static isElement(e) { 5 return 1 === e.nodeType; 6 } 7 } 8 const t = (e, t) => { 9 const n = [...e.childNodes]; 10 for (; n.length; ) { 11 const e = n.shift(); 12 if (!e) break; 13 if (t(e)) return !0; 14 n.concat(e.childNodes ? [...e.childNodes] : []); 15 } 16 return !1; 17 }; 18 [ 19 ...[...document.getElementsByTagName("code")].filter( 20 (n) => !t(n, (t) => e.isElement(t) && "PRE" === t.tagName) 21 ), 22 ...[...document.getElementsByTagName("pre")].filter( 23 (n) => !t(n, (t) => e.isElement(t) && "CODE" === t.tagName) 24 ), 25 ].forEach((e) => 26 ((e) => { 27 ((e) => { 28 const t = (e) => { 29 const t = window.getComputedStyle(e); 30 [ 31 "background-color", 32 "display", 33 "color", 34 "letter-spacing", 35 "line-height", 36 "content-wrap", 37 "font-size", 38 "font-weight", 39 "font", 40 ].forEach((n) => { 41 e.style.setProperty(n, t.getPropertyValue(n)); 42 }); 43 }, 44 n = [{ element: e, visited: !1 }]; 45 for (; n.length; ) { 46 const e = n.pop(); 47 if (!e) continue; 48 const o = [...e.element.children].flatMap((e) => 49 e instanceof HTMLElement ? [e] : [] 50 ); 51 if (e.visited || !o.length) t(e.element); 52 else { 53 const t = [ 54 { element: e.element, visited: !0 }, 55 ...o.map((e) => ({ element: e, visited: !1 })), 56 ]; 57 n.push(...t); 58 } 59 } 60 })(e); 61 const t = document.createElement("div"); 62 (t.style.display = window.getComputedStyle(e).display), 63 (t.attachShadow({ mode: "closed" }).innerHTML = e.outerHTML), 64 e.replaceWith(t); 65 })(e) 66 ); 67})(); 68

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

DeepL Code Blocker という先行事例があるなら、それが何をやっているか解析してみてはどうでしょうか。インストールしてあれば、Chrome のユーザプロファイルディレクトリの中に blmfehnodbgjheaofcecmjbbapmaikap というディレクトリがあって、その中にソースがあるはずです。

Google 翻訳と同じように、HTML の translate 属性に従ってくれるかもしれません。そうであれば、翻訳したくない語を <span translate=no> </span> で囲むだけです。

投稿2022/11/17 15:27

int32_t

総合スコア20856

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Nico

2022/11/17 16:25

ありがとうございます。大変助かりました。ソースコードを見れると思っていませんでした。。 下記のようなスクリプトでした。 解析中ですがなにか気づいた点があればご教示いただけたら幸いです。 いまのところなにがなんだか。。という感じです。 (() => { "use strict"; class e { static isElement(e) { return 1 === e.nodeType; } } const t = (e, t) => { const n = [...e.childNodes]; for (; n.length; ) { const e = n.shift(); if (!e) break; if (t(e)) return !0; n.concat(e.childNodes ? [...e.childNodes] : []); } return !1; }; [ ...[...document.getElementsByTagName("code")].filter( (n) => !t(n, (t) => e.isElement(t) && "PRE" === t.tagName) ), ...[...document.getElementsByTagName("pre")].filter( (n) => !t(n, (t) => e.isElement(t) && "CODE" === t.tagName) ), ].forEach((e) => ((e) => { ((e) => { const t = (e) => { const t = window.getComputedStyle(e); [ "background-color", "display", "color", "letter-spacing", "line-height", "content-wrap", "font-size", "font-weight", "font", ].forEach((n) => { e.style.setProperty(n, t.getPropertyValue(n)); }); }, n = [{ element: e, visited: !1 }]; for (; n.length; ) { const e = n.pop(); if (!e) continue; const o = [...e.element.children].flatMap((e) => e instanceof HTMLElement ? [e] : [] ); if (e.visited || !o.length) t(e.element); else { const t = [ { element: e.element, visited: !0 }, ...o.map((e) => ({ element: e, visited: !1 })), ]; n.push(...t); } } })(e); const t = document.createElement("div"); (t.style.display = window.getComputedStyle(e).display), (t.attachShadow({ mode: "closed" }).innerHTML = e.outerHTML), e.replaceWith(t); })(e) ); })();
Nico

2022/11/17 16:28

コメントでは見づらかったので編集でコード部分を最初の質問欄に追記しました。
int32_t

2022/11/17 21:46

おお、translate 属性ではなく、翻訳してほしくない部分を closed ShadowRoot に移しているんですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問