DEXCSランチャー v2.5 製作メモ / 日本語化

タスク画面の原版と日本語化版を、以下に対比して表示した。



日本語化方法

FreeCADの拡張モジュールを多言語化する方法があるだろう事は、CfdOFの元本ソースInitGui.py中(71行目)に、

        # enable QtCore translation here, todo

なるコメント行があり、ここで何らかの方法を組み込む仕組みがありそうな点は推察できているが、現時点では不明であったので、当面従来のDEXCSランチャーで実施している方法に倣って実施した。

とはいうもの、従来の方法は、pythonでは一般的な方法と考えられているgettextを使う方法で、これはソース中の変換したいテキスト部分(通常はダブルクオーテーションによって括られている)を、_(“text”) といった形で括っておくもので、この部分が変換対象になって、変換辞書に一致したテキストが見つかれば、そのテキストに対応した訳語に変換してくれるというものであった。しかるにCfdOFにおけるタスク画面は、QtDesignerによって作成された .ui ファイルをインポートする形のpythonプログラムにて作成されており、画面中に表示される名前は全て.uiファイル中に定義されている。そしてこの.uiファイル中での定義方法は、

    <string>Edit</string>

となっており、テキストそのものがダブルクオーテーションによって括られていないという事がわかった。従って、この部分を_()で括ったところで、表示が_(Edit) に変更されることにしかならない。

QtDesignerによって作成された .ui ファイルをインポートするでなく、pythonプログラムに変換する方法(ネット検索ではこの方法が上位でヒットする)であればこういうことにはならない(別途作成中の、Plotメニューでも確認済み)であるので、タスク画面作成プログラムそのものも、.ui ファイルをインポートするでなく、変換方式に変更する事も考えられなくもなかったが、単純な作業にはなりそうにないので躊躇われた。

そこで、以下の方法を考えた。つまり、いずれのタスク画面も、def __init__() ブロックにおいて、.uiファイルをインポートしたその直後において、タスク画面を、self.form = … という呼び出しで作成しているので、その直後に変換したいテキストラベルやボタンの名前を、再度、

     self.form.label.setText(_("Text"))

という形で書き換えてしまおうというものである。具体的に、メッシュ作成タスク画面作成プログラム(_dexcsTaskPanelCfdMesh.py)における変更(追加)コードを以下に示しておく。

まず、冒頭、

import sys
import gettext

localedir = os.path.expanduser("~") + "/.FreeCAD/Mod/dexcsCfMesh/locale"
if sys.version_info.major == 3:
	gettext.install("dexcsCfMeshSetting", localedir)
else:
	gettext.install("dexcsCfMeshSetting", localedir, unicode=True)

として、gettext処理(訳語変換)プログラムを実行。辞書ファイルが、FreeCAD/Mod/dexcsCfMesh/localeにあるという前提である。使用環境のpythonのバージョンに応じて呼び出し方法を変えている。

def __init__() ブロックにおいては、set.form = … の後、以下のように青字部分を追加している。

self.form = FreeCADGui.PySideUic.loadUi(os.path.join(os.path.dirname(__file__), "dexcsTaskPanelCfdMesh.ui"))

self.form.setWindowTitle(_("dexcsCFD Mesh"))
self.form.pb_write_mesh.setText(_("Write mesh case<"))
self.form.l_featureAngle.setText(_("Feature Angle(deg)"))
self.form.pb_stop_mesh.setText(_("Stop"))
self.form.l_scaleToMeter.setText(_("Scale to Meter:"))
self.form.pb_edit_mesh.setText(_("Edit"))
self.form.pb_run_mesh.setText(_("Run mesher"))
self.form.label_3.setText(_("Mesh verification<"))
self.form.label_5.setText(_("Mesher<"))
self.form.label_6.setText(_("Mesh<"))
self.form.pb_checkmesh.setText(_("CheckMesh"))
self.form.label.setText(_("Mesh Parameters<"))
self.form.check_optimiseLayer.setText(_("optimiseLayer"))
self.form.label_maxNumIterations.setText(_("maxNumIterations"))
self.form.label_maxAllowedThickness.setText(_("maximum allowed thickness:"))
self.form.label_featureSizeFactor.setText(_("featureSizeFactor"))
self.form.label_reCalculateNormals.setText(_("reCalculateNormals"))
self.form.label_nSmoothNormals.setText(_("Number of iterations:"))
self.form.check_keepCells.setText(_("keepCellsIntersectingBoundary"))
self.form.l_max.setText(_("Base element size:"))
#self.form.cb_workflowControls.setText(_("workflowControls"))
self.form.label_2.setText(_("Status"))

なお、ダブルクオーテーションで括られたテキスト名は、dexcsTaskPanelCfdMesh.ui 中,<string>…</string>で括られた該当箇所のテキスト名をカット&ペーストで転記したものであり、老眼一歩手前のマウス操作の手違いで、余分な箇所(<)まで転記されたものが何箇所か残っていた。本記事冒頭に掲載した英語版画面イメージにおいて、一部表記に不具合があるのはこの為である。訳語を作成する段階において気付いていたのだが、とりあえず動作確認を優先してそのまま進めた(もちろん今後手直し予定)。

また、下から2行目はコメントアウトしないとエラーになった為、これもとりあえず全体的な動作確認を優先しコメントアウトしたもので、この部分も今後手直し予定である。

また、日本語訳語において、一部原文のまま表記している箇所がいくつか存在する。これは闇雲に日本語化すれば良いというものでない。たとえば、Paraviewをパラビューとしても却って分かり難くなってしまう。また、cfMeshの設定パラメタの名前そのものである。設定ファイル(meshDict)中の名前と違う表記にしてしまうと、meshDict中の何処に相当する箇所のパラメタなのかわからなくなってしまう。

とはいうもの、現時点での表示で、境界線が曖昧である点も否めない。日本語化して分かり難くなる可能性のある語句は重複表記の方が良いかもしれないが、画面サイズ上の問題があるので、ToolsTipsで補完するのが良いかもしれない。

注意事項

英語表記と日本語表記の切り替えは、OSの設定言語に依存して自動的に切り替わる。FreeCAD本体には、OSの設定言語には依らず、独自に言語を設定できる仕組みが存在する(「編集」⇒「設定」⇒設定メニュー:言語を変更)が、これを使ってFreeCAD本体の表示言語を変更しても、ここで設定した言語表記には反映されないという点はお断りしておく。

前へ 目次

Share

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください