外部ワークベンチを翻訳するとは?
FreeCADのワークベンチは、翻訳済みのqmファイル(言語ファイル)が読み込まれることで日本語される。
参考URL: qmファイルとはなんですか?:https://whatext.com/ja/qm
日本語化に求められることは、翻訳済みのqmファイルを作成し、FreeCADのプロファイルディレクトリに適切に配置することです。qmファイルはtsファイルからコンパイルされ生成されるため翻訳作業とは以下を指している
- tsファイルを翻訳・編集
- qmバイナリファイルを生成すること
tsファイルの<translation></translation>に対応する訳語(日本語)を記述すればOK。Linux環境でtsファイルをqmファイルに変換するにはlreleaseコマンドによる
$ lrelease workbench_ja.ts
例えば、アセンブリワークベンチのA2plusワークベンチを翻訳する場合以下の流れになる。
- $HOME/.FreeCAD/mod/translations/A2plut_ja.tsをテキストエディタ or QtLiguistアプリで翻訳
- lreleaseコマンドでA2plut_ja.tsを、A2plust_ja.qmに変換し、tsファイルと同じディレクトリに配置する
ツールバーアイコンは日本語化されない?
せっかく翻訳作業が完了したのでいざ!と思ってFreeCADを起動しても日本語になっていないものがある。
アセンブリのA2plusワークベンチだと、編集>設定の設定ウィンドウの各項目はすべて日本語化できたが、例えばツールバーのアイコン:DefineConstrainsは、”拘束を定義する”と訳してあるはずなのに未翻訳のDefineConstraints英語のままだったりする
なんでやねん!?
初期付属のDrafワークベンチでは翻訳はどうなってる?
「後からインストールしたワークベンチではなく、Draftワークベンチではどうなってる?」とチェックしてみると、ツールバーのアイコン:Mirrorが未翻訳のままになっていることを発見した。左おとなりの移動・尺度・回転などはちゃんと翻訳済みで表示されるのに。
「Mirrorは翻訳作業がそもそも行われていのではないか?」と思い、Githubでソースファイルをみてみるとちゃんと翻訳がなされているのが確認できる。
https://github.com/FreeCAD/FreeCAD/blob/419e601482228c534e5c7567cddb05091bb08747/src/Mod/Draft/Resources/translations/Draft_ja.ts
これが該当箇所として正しいか確かめるため、上記画像2624行目のfilename='gui_mirror.py' line='63' を参照する。gui_mirror.py(tsファイルの上位ディレクトリに存在する)というファイルの63行目が翻訳対象であるという意味なので、gui_mirror.pyをGithub上でまたもや見てみると、
https://github.com/FreeCAD/FreeCAD/blob/419e601482228c534e5c7567cddb05091bb08747/src/Mod/Draft/draftguitools/gui_mirror.py
TooTip: "Mirrors the selected objects along a line defined by two points."が、ツールバー上をのアイコンをマウスオーバーして表示されるツールチップの内容と合致するので当該箇所のソースファイルにまちがいない。
Draftワークベンチにおいてツールチップまで翻訳されているものは、ぱっとマウスオーバーで確認した限りにはなるけど1つもなかった。tsファイルを覗くと翻訳作業はすべて終わっているはずなのに。
ここでQT_TRANSLATE_NOOPとは、翻訳作業用に定義されている関数のこと。pyupdateコマンドを実行した際に、引数に指定されている単語を収集するために記述されている。QT_TRANSLATE_NOOP自体が翻訳をしているわけではないんですよねこれ
ここまででわかったことは、翻訳済みqmファイルを作成しても、実際は翻訳されるものとされないものがあるということだ。その理由がわからない。
Crowdinは必須では無い
公式Wikiを読むと、翻訳は以下の流れで説明される
参考URL:Translating an external workbench https://wiki.freecadweb.org/Translating_an_external_workbench
- ワークベンチソースファイル中の、QT_TRANSLATE_NOOP()の引数の文字列を、pylupdateコマンドで自動収集しtsファイルへ保存
- 生成されたtsファイルをCrowdinにアップロードをしてみんなの翻訳を待つ
- 訳者(管理者権限ユーザーと訳者ユーザーは区別される)はCrowdinにて翻訳をそれぞれ投稿する。翻訳作業完了(要管理者権限)後、tsファイルをqmファイルに変換してプロファイルディレクトリに配置する
- FreeCAD起動後呼び出しがあれば、qmファイルが読みこまれ日本語化されたツールバーやそれぞれが表示される
Crowdinとは、多数の人間によって最大公約数的正解な訳語を効率的に作成することができるウェブサービスです。各人がそれぞれ行った翻訳から、だいたい良さそう・あってそうな翻訳を導き出すことで本家にマージ・アップロードを行える。つまり、Crowdinを利用することで間違った翻訳や、翻訳自体はあっているいるけど機能を説明するものとしては適切でないといった翻訳を無くすことができる。
他Crowdinを使用するメリットは、forumを漁っていて発見したことになるが以下。Google翻訳のようなAI機械翻訳をオープンソースプロジェクトに利用するのは法律ライセンス的にNGであり、膨大な翻訳対象文字列を処理するためには多数のユーザー手を借りて翻訳を加えていくことが求められる。そうするとCrowdinは適したサービスということになる。
しかし、まず個人で適当に使うくらいならわざわざCrowdinを経由する必要があるわけではない。まずはtsファイルを自分の環境で翻訳してみて試す、でいいはず。なわけです
qmファイルを使用しなくても翻訳自体はできるが・・・・
ワークベンチソースファイル中配列のMenuTextやToolTipの値に代入されることで、その文字列がツールバーのアイコンなどに表示される。
試しに、tsファイルではなくソースファイルであるDefineConstrains.pyの当該箇所を直接編集するとちゃんと日本語化はなされる。qt_translate_noopを使用せず、対象文字列を日本語にしてしまえばそりゃうまくいくだろう
けれどこれでは翻訳作業の意味がない。翻訳箇所をまとめて一括して外部ファイルにして編集できるのがよいのだから。
さいごまでお読みいただきありがとうございました
- PySide Beginner Examples - FreeCAD Documentation https://wiki.freecadweb.org/PySide_Beginner_Examples
- PySide Intermediate Examples - FreeCAD Documentation https://wiki.freecadweb.org/PySide_Intermediate_Examples
- PySide Advanced Examples - FreeCAD Documentation https://wiki.freecadweb.org/PySide_Advanced_Examples
コメント
コメントを投稿
こんにちは!コメントありがとうございます