結果
こんにちは、海行です。
VisualStudio2017(以下VS)でソースコードの英語のコメントを日本語に翻訳する拡張を作ったので公開します。
https://marketplace.visualstudio.com/items?itemName=umiyuki.TranslatorVSIX
↑こちらからVSIXファイルをダウンロードできます。
インストール方法
VSがインストールされてる状態で、ダウンロードしたVSIXファイルを開くと拡張機能がインストールできます。
試してませんがVisualStudio2010以上なら互換性があるらしいです。(注:最後の17/4/10追記参照)
アンインストールするにはVSのメニューのツール→拡張機能と更新プログラムからTranslatorENtoJPを選んでアンインストールできます。
使い方
インストールすると、VSのメニューのツールにTranslateという項目が増えてると思います。
まず、翻訳したいコメントの行を選択します。複数行にまたがったコメントでもOKです。
メニューからTranslateを実行します。
日本語の翻訳が下に追加されます。
Google翻訳で翻訳されてます。
翻訳コメントは決め打ちで120バイトで改行されます。
以上です。
他の機能とかはありません。
是非使ってみてください。
ソース
VisualStudioのプロジェクト一式をGitHubに上げました。
https://github.com/umiyuki/VisualStudioExtensionTranslatorENtoJP
↑こちらからDLできます。
とりあえず自分が使うに事足りるだけの機能しかないので、他の人は使いにくいかもしれないので、なんかいい感じに改良していただけるのは大歓迎です。
経緯
最近、Google翻訳の精度がメッチャ上がりまして、Webページを読むのにChromeで右クリックから”日本語に翻訳”すればスラスラ読める日本語になって、大変便利ですね。
それと、最近人のソースコードを読む機会がやたらめったら多いです。
他人が書いたソースコードを読むのはもっぱらコメント頼みですよね。結構しっかりコメント残してくれてる方が多くてありがたいです。
しかし、英語圏の人、というか世界中の大抵誰でも英語でコメントを書かれてます。
読めないですね。
Webページがあんなに素晴らしい自動翻訳で読めるのに洋書やソースコードが自動翻訳で読めないとか何かの間違いでしょう。
Chromeは実はテキストファイルも右クリックから日本語に翻訳できるので、とりあえず私は今まではソースコードをChromeで開いて翻訳して、でもコメント以外も日本語になってしまうので、コメント部分だけ手作業でコピペして…ってやってました。
それでも随分コード読むのが便利になったものの、なんかこう…エンジニアとしてこういうやり方は間違ってるんじゃないか?
そう思って、あと気が向いたので、VisualStudio拡張作って翻訳する事にしました。
実はソースを翻訳できるVisualStudio拡張はすでに公開されてます。
https://marketplace.visualstudio.com/items?itemName=BenderBendingRodriguez.Translator
↑こちらです
http://vstranslator.codeplex.com/
↑ソースもMitライセンスでこちらに上がってます。
これ使えばいいじゃんって話なんですが、Google翻訳が動作しなかったり、VS2017に対応してなかったりするので、ソースをお借りして改造して作り直すことにしました。
翻訳エンジンの選定についてですが、Google翻訳APIは無料枠が無いし、最初はマイクロソフト翻訳APIを使おうと思ってましたが、試してみると個人的にはGoogle翻訳が出してくれる日本語の方が読みやすいと感じましたので、やはりGoogle翻訳を使いたい…
ググッてたら、アクセストークン無しで叩ける翻訳APIのエンドポイントがあるとの事(https://github.com/Stichoza/google-translate-php/issues/62)。
ありがたく使わせてもらう事にしました。
ただ、多分非公式APIだと思うので、いつ潰されたり、アクセス規制されても文句言えないと思います。
あしからず。
ショートカット割り当て
実際この拡張機能を使ってコメントを翻訳してくのに、イチイチメニューから選ぶのはめんどくさいですね。
キーボードショートカットに割り当てる事も出来ます。
やり方はツール→オプション→キーボードでツール.Translateを見つけ出して、ショートカットキーを割り当てます。
ただ、ショートカットはどれもほぼすでに割り当て済みだったので、私は右クリックのコンテキストメニューに割り当てて使う事にしました。
こっちのやり方は、ツール→カスタマイズ→コマンドタブ→コンテキストメニュー→その他のコンテキストメニュー | コードウインドウ→コマンドの追加→ツール→Translate
です。
VisualStudio2017拡張入門
せっかくなので、今回触った範囲(つまりほんのちょびっと)でVS2017拡張の解説をしてみます。
意外と簡単です。
私はこちら(http://www.kekyo.net/2016/12/04/6131)の記事をとっかかりにさせていただきました。
他の日本語の情報は少ないですが、公式のリファレンス(https://docs.microsoft.com/en-us/visualstudio/extensibility/extensibility-in-visual-studio)がかなり充実してるので、これを読めばよさげです。
英語ですが、英語のWebページはGoogle翻訳して読めばOKです。
プロジェクトを作る
VisualStudioを開いて、テンプレート→VisualC#→Extensibility→VSIX Projectを選びます。
Extensibilityが無い場合は、下の方にある”探してるものが見つからない場合 Visual Studio インストーラを開く”を選んで、ワークロード→VisualStudio拡張機能の開発にチェックを入れてインストールします。
プロジェクトができたら、ソリューションエクスプローラのプロジェクトを右クリックして追加→新しい項目→Extensibility→Custom Commandを追加します。
Command1.csみたいなファイルが生成されるので、試しにこの状態でデバッグ実行してみます。
すると新しいVSが開きます。このVSにはメニュー→ツールにCommand1という項目が増えてます。
これを実行してみると、メッセージウインドウが表示されます。
つまり、メニューを実行するとCommand1.csのMenuItemCallback関数が呼ばれる形になります。
ですので、この関数の中身をいじくれば色々できます。
ちなみに、現在選択中のテキストが欲しい時は、MenuItemCallback関数の中にこんな感じで書きます。
1 2 3 4 5 6 |
DTE dte = (DTE)this.ServiceProvider.GetService(typeof(DTE)); if (dte.ActiveDocument != null) { var selection = (TextSelection)dte.ActiveDocument.Selection; string text = selection.Text; } |
これで選択中の文字列が取れるので、色々加工してselection.Textに代入すれば、選択文字列を加工できます。
拡張機能をインストールする
プロジェクトをビルドすると、VSIXファイルが出力されます。
これを開けばVSに拡張機能をインストールできます。
多分このファイルを送れば他の人にもインストールしてもらえると思います。
拡張機能をアップロードする
拡張機能の公開も簡単すぎるほど簡単にできます。
こちら(https://visualstudiogallery.msdn.microsoft.com/)からVisualStudioギャラリーのページへ行き、アップロードという項目を選んで、必要項目を入力してビルドしたVSIXをアップロードすれば、ちょっと経った(数分?)後に拡張機能が公開されます。
今後の展望
とりあえず、既知の問題として、///のようなスラッシュ3つのコメントを翻訳すると、翻訳はできますがレイアウトが崩れる問題がありますが、どうやれば直せるだろう。
あとは翻訳追記じゃなくて置換にしたい~とか、英語以外の言語も翻訳したい~みたいな機能はあった方がいいような気もしますが、そうしたらオプション画面とか作んないといけなさそうだし…めんどくさそう…要望が出れば対応するかも…?
ぶっちゃけ誰かがもっとメッチャいい感じに改良とかしてくれたら嬉しいですね。
17/4/10追記
この記事を書いた後で、VisualStudio2013と2015にもインストールしようとしてみましたが、できませんでした。
調べたところ、デフォルトの設定では2017のみ対応の設定になっているようです。
2013や2015にも対応させるには、まずプロジェクトの~.vsixmanifestを開いてInstall TargetsのMicrosoft.VisualStudio.CommunityのVersion Rangeが[15.0]になってるのを[12.0,15.0]にする必要があります。
また、これだけだと2013で実行した時にエラーが出てしまうので、さらにソリューションエクスプローラの参照の中にMicrosoft.VisualStudio.Shell.15.0があると思いますが、これを削除して、参照を右クリック→参照の追加→拡張→Microsoft.VisualStudio.Shell.12.0にチェックを入れます。
これで2013~2017までに対応できました。
VisualStudioギャラリーにアップしてる拡張についてはすでに修正してあります。
19/4/12追記
VisualStudio2019がリリースされたので、ギャラリーにアップしてる拡張を2019に対応したものに更新しました。