ShareXの日本語化作業、もう一歩踏み込んでみました。はじめてのVisual StudioではじめてのC#です。
今回やったこと
今回も日本語化されていない部分に日本語訳を充てるのは同じです。
今までやってきた翻訳作業は、英語と日本語を切り替えれれるようにしてくれたところに日本語を埋めただけでした。
今回は一歩進めて、切り替えるようになっていないところを、切り替えられるようにしつつ、英語リソースと日本語リソースを足すということをやりました。
今回、日本語化したところはここです。
メニュー画面
画像エディタのアノテーションのプロパティ画面
日本語にしなくてもわかりそうな部分ですが、初級編ということで経験を積みます。
開発手順のメモ
この先は読んでも面白くないです。
やったことを後日の自分のために簡単に振り返っておきます。
Visual Studioをインストール
まじめにVisualStudioをインストールするなんて何十年ぶりだ、というくらい久しぶりのVisual Studioの登場です。ShareXがC#というプログラミング言語でできているので仕方ない。
個人は無料で使えるCommunity版をダウンロードしてインストール
ワークロードでC#を選ぶのと、拡張で英語の言語パックを入れておく。
インストール完了後にインストーラーを立ち上げて追加することはできるので焦ることはない。
gitでコードを持ってくる
VisualStudioでもgitの操作はできるけど操作方法がわからないので、cmderに入ってきたgitコマンドラインで実行する。
自分のアカウントにforkしたほうを持ってくるのだ
ビルドしてみる
持ってきたコード一式でとりあえずビルドしてみようとする。が、いきなりやり方がわからない。
VisualStudを立ち上げると、フォルダを選択するように言われるので.slnファイルを選択する。
なんかうまくいってるっぽい。右側にソリューションエクスプローラーというのが出て、ソースコードがツリー状態に見える。
ここで初めてのビルド
ツールバーにあるビルド>ソリューションのビルドを実行する
なんかいろいろメッセージがでてうまくいったっぽい。
はじめての起動
自分でビルドしたShareX.exeを実行する。普通に動くだけで感動する。おー。 ふむふむ、ふつうやね。何も変えてないから。
ここまでは前準備です。
プログラム修正へ進む
ここからはプログラムにもぐる。挫折しかけたこと2回くらい。
まずは言語切り替えの仕組みを理解する
いままでは、ResxResourceManagerというソフトで英語メッセージと対になる日本語メッセージを書いていただけなので、いきなりつまづく。何をしていいかわからない。属にいう分からないことが分からない状態。
わからん。Gitを探したら、こんなプルリクエストがあったので参考にする(以後、師匠)
https://github.com/ShareX/ShareX/pull/5158/files
師匠によると、選択肢系は、EnumとResources.resxとResources.Designer.cs あたりをセットで修正していくみたいだ。
BorderStyleを修正するために、BorderStyleのEnumを探す。ソリューションエクスプローラの検索機能にキーワードをぶちこんでみる。
発見!(これだけでうれしい)
師匠のコードをみながら
ShareX.HelpersLib/Properties/Resources.resx
とShareX.HelpersLib/Properties/Resources.ja-JP.resx
にXMLデータを追加してみる。Resources.Designer.csにもコードを足してみる。
言語ファイルのキーは、BorderStyle_Solid
のようにEnumの名前とEnumの値を_でつなげたものを使えばいいらしい*1
見よう見真似で3つのファイルを修正して、ビルドしてみると、うまくいった。
ここで問題発覚
Resources.Designer.cs
~はどうやら自動で作成されるらしく、日本語版のVisual Studioで自動生成するとコメント部分が日本語になる。Github上のコメントは全部英語なので、これをコミットするとまずい。自動生成ということを知らずに、まずは手で英語コメントをコピペし始める。量が多くて挫折しかける。
インターネットを探したら、Visual Studio自体を英語にすればOKとのこと。初めてのVisual Studioなのに全編英語で作業するのツライ、と思いながらも英語環境にスイッチ。*2
やってみるとコメントに無駄な差分がなくなる。ありがとうインターネット。やる気が復活。
BorderStyleのタイトル部分は?
選択肢部分は日本語化できたけど、BorderS style:と書いてある選択肢の左側のタイトル部分が英語のまま。
きっとどこかに「Border style:」って書いてあるんだろうと、とりあえずコード全体を"Border style:"で検索かます!
ここにたどり着く。//TODO translateって書いてある。手抜き工事め
https://github.com/ShareX/ShareX/blob/7349eca1308487115bb82261de1ff814a811138a/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs#L517
5行くらい下にResourcesから名前を持ってくるコードがあったので、真似てこんな形に書き換えてみる。
https://github.com/ShareX/ShareX/commit/d5bb4474edb211086c347824fbcfce5d7e526f01#diff-fcbf33ff0224dc7b307da7e1bbe7f869ed37682729cbc7ce578c21cde1a9167d
動作確認したらうまくいった。
コミット&Pull Request発射
いつもと違ってコードの修正も入ったのでちょっと緊張のプルリク
https://github.com/ShareX/ShareX/pull/5663
なんかエラーが出たけど、mergeされた。
開発者版をダウンロードして確認
最新の開発者向けバージョンをインストールして確認。 おお、反映されてる。
やり方改善
最初はわからなかったけど、あとあと覚えたこと。
デバッグ機能
最初はわからなかったので、毎回フルビルドして実行確認をしていたのですけど、デバッグ機能がありました。もう覚えました。 変数の中も見えるしステップ実行もできるしブレイクポイントを置くとコードがストップするし、かなり楽。
変数の参照を探す機能
find all references(Shift+F12)で探すと楽
Enumを_でつないだら名前になる不思議の解消
C#はそういうもんだ、でもよかったのだけど、ちょっとコードを追いかけたら見つかった。
https://github.com/ShareX/ShareX/blob/6799edaa1bd099887758bd9363e048327d5a8e8e/ShareX.HelpersLib/Extensions/EnumExtensions.cs#L60
ここにEnumExtensionsクラスがあって、こいつを使ってキーがあったらそっち優先、なかったらEnumのDescriptionを使うように書いてあった。
まだわからないこと
ここまでやったけど、C#のファイルの配置ルールとかわからん。同じファイルがあちこちにあるから取り違えるのが危険。
さいごに
オープンソースにContributeするということで、翻訳されていな部分を翻訳する作業をしてみました。初めてC#を触ってみました。まだ慣れないけど、あたらしいものを使えるようになることはいいことですね。
ShareXはなかなかいいキャプチャーソフトだと思います。結構なボリュームが日本語化されているので英語が苦手でも使えると思います。キャプチャーソフトを探しているかた、使ってみてください。
参考にしたページ
[VisualStudio] ソース上のコメントを英語で統一したいのにデザイナーが自動生成するcsファイルが勝手に日本語コメントになるので英語に直す
https://qiita.com/tera1707/items/ee48e18167ed2d690b9b